QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#328348#1844. CactuslefyWA 260ms146868kbC++142.9kb2024-02-15 19:27:072024-02-15 19:27:08

Judging History

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

  • [2024-02-15 19:27:08]
  • 评测
  • 测评结果:WA
  • 用时:260ms
  • 内存:146868kb
  • [2024-02-15 19:27:07]
  • 提交

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]);
    memset(du,0,sizeof(du));
    for(int i=1;i<=n;i++)if(!vis[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);
}
map<int,int>mp[N];
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]++;
        if(mp[x][y]||mp[y][x])cout<<"*";
        mp[x][y]=1;
    }
    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: 12ms
memory: 96352kb

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

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

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
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 83201
4350 5593
4438 ...

result:

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