WA87蒟蒻求助!

P2731 [USACO3.3] 骑马修栅栏 Riding the Fences

so_find_skind @ 2023-01-30 11:09:18

rt,把#8数据下载了一下发现输出没啥问题为什么会 WA啊。

代码:

#include<bits/stdc++.h>
using namespace std;
int m,n,g[505][505],d[505],ans[505],cnt;
void dfs(int p){
    for(int i=1;i<=n;i++){
        if(g[p][i]){
            g[p][i]--;
            g[i][p]--;
            dfs(i);
        }
    }
    ans[++cnt]=p;
}
int main(){
    cin>>m;
    for(int i=1,u,v;i<=m;i++){
        cin>>u>>v;
        g[u][v]++;
        g[v][u]++;
        n=max(n,u);
        n=max(n,v);
        d[u]++;
        d[v]++;
    }
    int st=1;
    for(int i=1;i<=n;i++){
        if(d[i]%2){
            st=i;
            break;
        }
    }
    dfs(st);
    for(int i=cnt;i>=1;i--)
        cout<<ans[i]<<"\n";
    return 0;
}

by hzoi_Shadow @ 2023-01-30 11:17:35


#include<bits/stdc++.h>
using namespace std;
int n=0,m,g[501][501],dis[501],path[9999],beginn=0x3f3f3f3f,cnt=0;
void dfs(int i)
{
    int j;
    for(j=beginn;j<=n;j++)
    {
        if(g[i][j]!=0)
        {
            g[i][j]--;
            g[j][i]--;
            dfs(j);
        }
    }
    path[cnt]=i;
    cnt++;
}
int main()
{
    int i,x,y,start,sum=0;
    cin>>m;
    for(i=1;i<=m;i++)
    {
        cin>>x>>y;
        g[x][y]++;
        g[y][x]++;
        dis[x]++;
        dis[y]++;
        n=max(n,max(x,y));
        beginn=min(beginn,min(x,y));
    }
    start=beginn;
    for(i=beginn;i<=n;i++)
    {
        if(dis[i]%2==1)
        {
            sum++;
            if(sum==1)
            {
                start=i;
            }
        }
    }
    dfs(start);
    for(i=cnt-1;i>=0;i--)
    {
        cout<<path[i]<<endl;
    }
    return 0;
}

by _ChongYun_ @ 2023-01-30 11:26:17

#include<bits/stdc++.h>
using namespace std;
long long m,u,v,l;
long long d[114514];
long long ans[114514];
long long a[1555][1555];

void dfs(int x){
    for(int i=1;i<=500;i++){
        if(a[x][i]>=1){
            a[x][i]--;
            a[i][x]--;
            dfs(i);
        }
    }
    ans[++l]=x;
}

int main(){
    cin>>m;
    for(int i=1;i<=m;i++){
        cin>>u>>v;
        a[u][v]++;
        a[v][u]++;
        d[u]++,d[v]++;
    }

    int start=1;
    for(int i=1;i<=500;i++){
        if(d[i]%2==1){
            start=i;
            break;
        }
    }

    dfs(start);

    for(int i=l;i>=1;i--){
        cout<<ans[i]<<endl;
    }
    return 0;
}

by so_find_skind @ 2023-01-30 12:14:53

@oHAMBURGERo

@The_Shadow_Dragon

感谢两位大佬


by hzoi_Shadow @ 2023-01-30 13:53:43

@zhezhikongdanruxue 不用谢


|