QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#328369#1844. CactuslefyWA 111ms84664kbC++143.1kb2024-02-15 19:38:352024-02-15 19:38:36

Judging History

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

  • [2024-02-15 19:38:36]
  • 评测
  • 测评结果:WA
  • 用时:111ms
  • 内存:84664kb
  • [2024-02-15 19:38:35]
  • 提交

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;
    int tp=top;
    if(x==89||x==155249||x==71561)cout<<x<<"\n";
    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>tp){
                    
                    y=st[top--];hav[dcc].push_back(y);if(x==71561)cout<<y<<"*\n";
                    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[155249]<<"\n";
        // for(int v:e[155249])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;
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 8ms
memory: 68240kb

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

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: 111ms
memory: 84664kb

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:

89
71561
155249
209953*
183549*
155249*
286686*
186115*
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
369...

result:

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