QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#328359#1844. CactuslefyWA 155ms81936kbC++143.0kb2024-02-15 19:32:012024-02-15 19:32:01

Judging History

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

  • [2024-02-15 19:32:01]
  • 评测
  • 测评结果:WA
  • 用时:155ms
  • 内存:81936kb
  • [2024-02-15 19:32:01]
  • 提交

answer

#include <bits/stdc++.h>
using namespace std;
const int N=6e5+10;
vector<int>e[N];
void add(int u,int v){
    e[u].push_back(v);
}
vector<int>ans;
int du[N<<1],n,m,vis[N];
void solve1(){
    queue<int>q;
    for(int i=1;i<=n;i++)if(du[i]&1)q.push(i);
    while(!q.empty()){
        int x=q.front();q.pop();
        if(vis[x]||du[x]%2==0)continue;
        vis[x]=1;du[x]=0;
        for(int v:e[x])if(!vis[v]){
            du[v]--;
            if(du[v]&1)q.push(v);
        }
        ans.push_back(x);
    }
}
int dcc,be[N],dfn[N],low[N],idd,st[N],top;
vector<int>b[N<<1],hav[N];
void Tarjan(int x){
    st[++top]=x;dfn[x]=low[x]=++idd;
    for(int v:e[x])if(!vis[v]){
        if(!dfn[v]){
            Tarjan(v);
            low[x]=min(low[x],low[v]);
            if(low[v]>=dfn[x]){
                dcc++;int y=0;
                b[dcc+n].push_back(x);b[x].push_back(dcc+n);
                du[x]++,du[dcc+n]++;hav[dcc].push_back(x);
                while(top&&st[top]!=x){
                    y=st[top--];hav[dcc].push_back(y);
                    b[y].push_back(dcc+n),b[dcc+n].push_back(y);
                    du[y]++,du[dcc+n]++;
                }
            }
        }else low[x]=min(low[x],dfn[v]);
    }
}

void solve2(){
    ans.push_back(-1);int sz=ans.size();
    for(int i=0;i<sz-1;i++)ans.push_back(ans[i]);
    if(n>1000){
        cout<<du[89]<<" "<<du[15249]<<"\n";
        for(int v:e[15249])if(!vis[v])cout<<v<<"\n";
    }
    memset(du,0,sizeof(du));
    for(int i=1;i<=n;i++)if(!vis[i]&&!dfn[i])Tarjan(i);
    queue<int>q;for(int i=1;i<=n+dcc;i++)if(du[i]==1)q.push(i);
    int tmp=0;
    while(!q.empty()){
        int x=q.front();q.pop();
        for(int v:b[x]){
            du[v]--;
            if(du[v]==1)q.push(v);
        }
        if(x<=n)continue;x-=n;
        int sz=hav[x].size();
        tmp=hav[x][0];
        for(int i=1;i<sz;i+=2)if(sz-i==3){
            ans.push_back(hav[x][sz-1]);
            ans.push_back(hav[x][sz-2]+n);
            ans.push_back(hav[x][sz-3]+n);
            ans.push_back(hav[x][sz-3]);
            if(i==1)ans.push_back(hav[x][sz-2]);
            ans.push_back(hav[x][sz-1]+n);
        }else{
            if(i+1>=sz)cout<<hav[x][0]<<" "<<hav[x][1]<<"\n";
            if(i==1)ans.push_back(hav[x][i]),ans.push_back(hav[x][i+1]+n),ans.push_back(hav[x][i+1]),ans.push_back(hav[x][i]+n);
            else ans.push_back(hav[x][i+1]),ans.push_back(hav[x][i]),ans.push_back(hav[x][i]+n),ans.push_back(hav[x][i+1]+n);
        }
    }
    ans.push_back(tmp);
}
int main() {
    scanf("%d%d",&n,&m);
    for(int i=1;i<=m;i++){
        int x,y;
        scanf("%d%d",&x,&y);
        add(x,y),add(y,x);
        du[x]++,du[y]++;
    }
    solve1();
    if(ans.size()!=n)solve2();
    printf("0 %d\n",(int)ans.size());
    for(int x:ans){
        if(n<=1000){
            if(x==-1)printf("2\n");
        else if(x<=2*n)printf("1 %d\n",x);
        }else if(x>2*n)cout<<x<<"**\n";
        
        
    }
    return 0;
}

详细

Test #1:

score: 100
Accepted
time: 7ms
memory: 64752kb

input:

3 3
1 2
1 3
2 3

output:

0 6
2
1 3
1 5
1 2
1 6
1 1

result:

ok You are right!

Test #2:

score: 0
Accepted
time: 8ms
memory: 64764kb

input:

7 7
1 2
1 3
2 3
2 4
2 5
3 6
3 7

output:

0 14
1 4
1 5
1 6
1 7
2
1 4
1 5
1 6
1 7
1 3
1 9
1 2
1 10
1 1

result:

ok You are right!

Test #3:

score: -100
Wrong Answer
time: 155ms
memory: 81936kb

input:

300000 368742
1 143504
1 234282
2 91276
2 296320
3 274816
4 212293
4 258214
5 253489
5 295826
6 96521
6 252745
6 267103
6 269879
7 5293
7 295586
8 44304
8 57067
8 233291
9 190526
10 18682
11 7440
12 24695
12 172561
12 243692
12 280316
13 80152
13 268749
14 146394
14 207280
15 151280
15 226848
16 458...

output:

2 0
145958
254450
89 71561
126 7488
555 53547
656 91746
707 10165
839 39861
1192 39918
1259 11675
1312 68728
1508 42217
1640 142133
1768 82434
1828 131298
1913 84603
2071 133434
2680 10322
2712 78356
3130 67057
3170 252441
3489 128486
3651 141773
3652 158748
3693 90080
3856 43463
3918 21083
3963 832...

result:

wrong answer Integer parameter [name=m'] equals to 2, violates the range [0, 0]