QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#425390 | #8686. Zoo Management | by_chance | WA | 15ms | 46332kb | C++14 | 3.1kb | 2024-05-30 10:18:46 | 2024-05-30 10:18:47 |
Judging History
answer
#include<bits/stdc++.h>
using namespace std;
const int N=4e5+5;
int n,m,a[N],b[N],head[N],nxt[N<<1],ver[N<<1],tot;
void ed(int type){if(n==40000)printf("%d\n",type);printf("impossible\n");exit(0);}
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(1);
if(c1[b[u]]!=c2[b[u]])ed(1);
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(2);
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(3);
}
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: 0ms
memory: 42272kb
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: 3ms
memory: 46332kb
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: 44384kb
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: 0ms
memory: 44332kb
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: 44360kb
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: 3ms
memory: 44384kb
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: 0ms
memory: 38120kb
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: 4ms
memory: 42324kb
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: 3ms
memory: 40200kb
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: 42336kb
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: 0ms
memory: 36808kb
input:
1 0 1000000 1000000
output:
possible
result:
ok single line: 'possible'
Test #12:
score: 0
Accepted
time: 0ms
memory: 37756kb
input:
2 0 1000000 987654 987654 1000000
output:
impossible
result:
ok single line: 'impossible'
Test #13:
score: 0
Accepted
time: 7ms
memory: 42252kb
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: 40632kb
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: 15ms
memory: 42340kb
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:
1 impossible
result:
wrong answer 1st lines differ - expected: 'possible', found: '1'