QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#425388#8686. Zoo Managementby_chanceWA 10ms48436kbC++143.1kb2024-05-30 10:17:252024-05-30 10:17:25

Judging History

你现在查看的是最新测评结果

  • [2024-05-30 10:17:25]
  • 评测
  • 测评结果:WA
  • 用时:10ms
  • 内存:48436kb
  • [2024-05-30 10:17:25]
  • 提交

answer

#include<bits/stdc++.h>
using namespace std;
void ed(int type){fprintf(stderr,"%d\n",type);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(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: 40228kb

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: 46488kb

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: 0ms
memory: 42336kb

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: 44328kb

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: 3ms
memory: 42340kb

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: 42444kb

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: 9ms
memory: 42228kb

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: 0ms
memory: 48436kb

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: 4ms
memory: 44260kb

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: 3ms
memory: 42364kb

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: 5ms
memory: 34152kb

input:

1 0
1000000 1000000

output:

possible

result:

ok single line: 'possible'

Test #12:

score: 0
Accepted
time: 0ms
memory: 39972kb

input:

2 0
1000000 987654
987654 1000000

output:

impossible

result:

ok single line: 'impossible'

Test #13:

score: 0
Accepted
time: 4ms
memory: 44300kb

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: 44288kb

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: 10ms
memory: 44460kb

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'