QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#425386 | #8686. Zoo Management | by_chance | WA | 8ms | 46428kb | C++14 | 3.1kb | 2024-05-30 10:14:17 | 2024-05-30 10:14:18 |
Judging History
answer
#include<bits/stdc++.h>
using namespace std;
void ed(){printf("impossible\n");exit(0);}
const int N=4e5+5;
int n,m,a[N],b[N],head[N],nxt[N<<1],ver[N<<1],tot;
void add(int u,int v){ver[++tot]=v;nxt[tot]=head[u];head[u]=tot;}
int dfn[N],low[N],dcnt,st[N],top,id[N],num;
void tarjan(int u,int fa){
dfn[u]=low[u]=++dcnt;st[++top]=u;
for(int i=head[u],v;i;i=nxt[i])if((v=ver[i])!=fa){
if(!dfn[v])tarjan(v,u),low[u]=min(low[u],low[v]);
else low[u]=min(low[u],dfn[v]);
}
if(dfn[u]==low[u]){
++num;int y;
do id[y=st[top--]]=num; while(y!=u);
}
}
vector<int> p[N],G[N];
int flag[N],ecnt[N],c1[N],c2[N],s[N],t[N],len,fa[N],sum[N],dep[N],res,odd;
void dfs0(int u){
s[len]=a[u];t[len]=b[u];++len;dfn[u]=1;
for(int v:G[u])if(!dfn[v])dfs0(v);
}
void dfs(int u){
dfn[u]=++dcnt;s[++len]=a[u];t[len]=b[u];
for(int v:G[u])if(v!=fa[u]){
if(!dfn[v])dep[v]=dep[u]+1,fa[v]=u,dfs(v);
else if(dfn[u]<dfn[v]){
if(dep[v]-dep[u]&1)res=1;
--sum[u],++sum[v];
}
}
}
void dfs1(int u){for(int v:G[u])if(fa[v]==u)dfs1(v),sum[u]+=sum[v];}
namespace BIT{
const int M=1e6+5;int c[M];
void add(int x){for(;x<M;x+=x&-x)c[x]^=1;}
int ask(int x){int s=0;for(;x;x-=x&-x)s^=c[x];return s;}
}
void check(int st){
int x=id[st];len=0;res=0;odd=0;flag[x]=1;
for(int u:p[x])++c1[a[u]],++c2[b[u]];
for(int u:p[x]){
if(c1[a[u]]!=c2[a[u]])ed();
if(c1[b[u]]!=c2[b[u]])ed();
if(c1[a[u]]>=2||c2[a[u]]>=2)odd=1;
}
if(p[x].size()==ecnt[x]){
dfs0(st);int p1=0,p2=0,i=0,j=1,k=0;
while(k<len&&i<len&&j<len){
if(s[(i+k)%len]==s[(j+k)%len])++k;
else{
if(s[(i+k)%len]>s[(j+k)%len])i=i+k+1;
else j=j+k+1; if(i==j)++i; k=0;
}
} p1=min(i,j); i=0;j=1;k=0;
while(k<len&&i<len&&j<len){
if(t[(i+k)%len]==t[(j+k)%len])++k;
else{
if(t[(i+k)%len]>t[(j+k)%len])i=i+k+1;
else j=j+k+1; if(i==j)++i; k=0;
}
} p2=min(i,j);
for(k=0;k<len;k++)if(s[(p1+k)%len]!=t[(p2+k)%len])ed();
return;
}
if(odd)return;dcnt=0;dfs(st);dfs1(st);
for(int u:p[x])if(sum[u]>=2)res=1;if(res)return;
for(int i=len;i>=1;i--)odd^=BIT::ask(a[i]),BIT::add(a[i]);
for(int i=len;i>=1;i--)BIT::add(a[i]);
for(int i=len;i>=1;i--)odd^=BIT::ask(b[i]),BIT::add(b[i]);
for(int i=len;i>=1;i--)BIT::add(b[i]);
if(odd)ed();
}
int main(){
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)scanf("%d%d",a+i,b+i);
for(int i=1,u,v;i<=m;i++){
scanf("%d%d",&u,&v);
add(u,v);add(v,u);
}
for(int i=1;i<=n;i++)if(!dfn[i])tarjan(i,0);
for(int i=1;i<=n;i++)p[id[i]].push_back(i);
for(int i=1;i<=m;i++){
int u=ver[2*i-1],v=ver[2*i];
if(id[u]==id[v]){++ecnt[id[u]];G[u].push_back(v);G[v].push_back(u);}
}
memset(dfn,0,sizeof(dfn));
for(int i=1;i<=n;i++)if(!flag[id[i]])check(i);
printf("possible\n");
return 0;
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 4ms
memory: 40232kb
input:
6 7 1 1 2 2 3 3 1 2 2 3 3 1 1 2 2 3 1 3 3 4 4 5 5 6 4 6
output:
possible
result:
ok single line: 'possible'
Test #2:
score: 0
Accepted
time: 0ms
memory: 42364kb
input:
5 6 10 10 20 20 30 30 40 50 50 40 1 2 2 3 1 3 3 4 3 5 4 5
output:
impossible
result:
ok single line: 'impossible'
Test #3:
score: 0
Accepted
time: 3ms
memory: 46364kb
input:
25 32 10 10 20 30 30 20 40 40 50 60 60 70 70 50 80 90 90 130 100 100 110 120 120 110 130 80 140 160 150 170 160 140 170 150 180 190 190 180 200 200 200 200 220 220 230 230 240 240 250 250 1 25 1 3 2 25 2 3 3 25 3 4 4 5 5 6 5 7 6 7 6 10 8 9 8 10 9 10 10 11 11 13 10 12 12 13 10 14 14 15 15 16 16 17 14...
output:
possible
result:
ok single line: 'possible'
Test #4:
score: 0
Accepted
time: 4ms
memory: 42344kb
input:
4 5 1 2 2 3 3 4 4 1 1 2 2 3 1 3 2 4 1 4
output:
possible
result:
ok single line: 'possible'
Test #5:
score: 0
Accepted
time: 0ms
memory: 44308kb
input:
26 31 70 170 210 230 160 130 180 110 40 200 140 120 90 30 220 70 230 140 190 80 30 180 80 60 170 50 50 90 200 20 10 10 100 210 150 150 110 220 20 160 60 190 120 40 130 100 1234 1234 666 666 88888 88888 1 2 2 3 3 4 4 5 5 6 6 7 1 7 2 8 8 9 2 9 3 10 10 11 3 11 10 12 12 13 13 14 14 15 10 15 3 16 16 17 3...
output:
possible
result:
ok single line: 'possible'
Test #6:
score: 0
Accepted
time: 0ms
memory: 46428kb
input:
23 29 70 170 210 230 160 130 180 110 40 200 140 120 90 30 220 70 230 140 190 80 30 180 80 60 170 50 50 90 200 20 10 10 100 210 150 150 110 160 20 220 60 190 120 40 130 100 1 2 2 3 3 4 4 5 5 6 6 7 1 7 2 8 8 9 2 9 3 10 10 11 3 11 10 12 12 13 13 14 14 15 10 15 3 16 16 17 3 17 3 18 18 19 19 20 20 21 3 2...
output:
impossible
result:
ok single line: 'impossible'
Test #7:
score: 0
Accepted
time: 3ms
memory: 44316kb
input:
23 29 70 170 210 230 160 130 180 110 40 200 140 120 90 30 30 70 230 140 190 80 30 180 80 60 170 50 50 90 200 20 10 10 100 210 150 150 110 160 20 30 60 190 120 40 130 100 1 2 2 3 3 4 4 5 5 6 6 7 1 7 2 8 8 9 2 9 3 10 10 11 3 11 10 12 12 13 13 14 14 15 10 15 3 16 16 17 3 17 3 18 18 19 19 20 20 21 3 21 ...
output:
possible
result:
ok single line: 'possible'
Test #8:
score: 0
Accepted
time: 3ms
memory: 42328kb
input:
27 31 70 170 210 230 160 130 180 110 40 200 140 120 90 30 220 70 230 140 190 80 30 180 80 60 170 50 50 90 200 20 10 10 100 210 150 150 110 220 20 160 60 190 120 40 130 100 1234 1234 666 666 88888 88887 88887 88888 1 2 2 3 3 4 4 5 5 6 6 7 1 7 2 8 8 9 2 9 3 10 10 11 3 11 10 12 12 13 13 14 14 15 10 15 ...
output:
impossible
result:
ok single line: 'impossible'
Test #9:
score: 0
Accepted
time: 0ms
memory: 44392kb
input:
23 30 70 170 210 230 160 130 180 110 40 200 140 120 90 30 220 70 230 140 190 80 30 180 80 60 170 50 50 90 200 20 10 10 100 210 150 150 110 160 20 220 60 190 120 40 130 100 1 2 2 3 3 4 4 5 5 6 6 7 1 7 2 8 8 9 2 9 3 10 10 11 3 11 10 12 12 13 13 14 12 15 14 15 10 15 3 16 16 17 3 17 3 18 18 19 19 20 20 ...
output:
possible
result:
ok single line: 'possible'
Test #10:
score: 0
Accepted
time: 0ms
memory: 38128kb
input:
26 31 70 170 210 230 160 130 180 110 40 200 140 120 90 30 220 70 230 140 190 80 30 180 80 60 170 50 50 90 200 20 10 10 100 210 150 150 110 220 20 160 60 190 120 40 130 100 1234 1234 666 666 88888 88888 1 2 2 3 3 4 4 5 5 6 6 7 1 7 2 8 8 9 2 9 3 10 10 11 3 11 10 12 12 13 13 14 14 15 12 15 3 16 16 17 3...
output:
impossible
result:
ok single line: 'impossible'
Test #11:
score: 0
Accepted
time: 7ms
memory: 35160kb
input:
1 0 1000000 1000000
output:
possible
result:
ok single line: 'possible'
Test #12:
score: 0
Accepted
time: 0ms
memory: 35672kb
input:
2 0 1000000 987654 987654 1000000
output:
impossible
result:
ok single line: 'impossible'
Test #13:
score: 0
Accepted
time: 0ms
memory: 40240kb
input:
9 11 10 20 20 10 30 30 40 40 50 50 60 60 70 70 80 80 90 90 1 2 2 9 1 9 3 9 3 4 4 5 3 5 6 9 6 7 7 8 6 8
output:
impossible
result:
ok single line: 'impossible'
Test #14:
score: 0
Accepted
time: 0ms
memory: 40456kb
input:
200 169 944791 944791 58451 32198 671963 109634 641261 285994 640166 853224 809541 583936 700164 58451 829480 459815 1420 466043 126697 501713 739296 553689 737840 218781 847811 567055 139002 700164 498982 886128 937395 640166 707472 476360 583936 171997 886128 687601 580209 934986 624698 1197 50726...
output:
possible
result:
ok single line: 'possible'
Test #15:
score: -100
Wrong Answer
time: 8ms
memory: 42468kb
input:
40000 48064 56746 477507 323790 828246 933555 292103 628765 865820 784150 776858 638118 799763 581618 683470 909436 425844 566115 297050 91874 677598 558851 818673 714212 874998 705114 278040 372713 107972 909868 929093 435194 474652 262024 803647 411876 43755 533688 649231 398503 286311 640015 5198...
output:
impossible
result:
wrong answer 1st lines differ - expected: 'possible', found: 'impossible'