为啥RE了????

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

liyishao1125 @ 2024-01-17 10:14:57

RT

#include<bits/stdc++.h>
using namespace std;
const int N=10000;
int m,u,v,g[N][N],d[N],s[N],top,st=1;
void dfs(int x){
    for(int i=1;i<=N;i++){
        if(g[x][i]>0){
            g[x][i]--;g[i][x]--;dfs(i);
        }
    }
    s[++top]=x;
}
int main(){
    cin>>m;
    for(int i=1;i<=m;i++){
        cin>>u>>v;
        g[u][v]++;
        g[v][u]++;
        d[u]++;
        d[v]++;

    }
    for(int i=1;i<=N;i++){
        if(d[i]%2){
            st=i;
            break;
        }
    }
    dfs(st);
    for(int i=m+1;i>=1;i--){
        if(s[i])
        cout<<s[i]<<'\n';
    }
}

by White_Night_ @ 2024-05-01 15:00:02

@liyishao1125 把O2关了就行了


by fengzhaoyu @ 2024-05-01 15:19:43

定义一个n,表示n个点,第6,23排。 输出答案用top。

#include<bits/stdc++.h>
using namespace std ;
int g[10005][10005],du[100004];
int m,n;
int ans[100005],tot;
void dfs(int u)
{
    for(int i=1;i<=n;i++)
    {
        if(g[u][i]>0)
        {
            g[u][i]--;
            g[i][u]--;
            dfs(i);
        }
    }
    ans[++tot]=u;
}
int main()
{
    cin>>m;
    for(int i=1;i<=m;i++)
    {
        int u,v;
        cin>>v>>u;
        g[v][u]++;g[u][v]++;
        du[v]++;
        du[u]++;
        n=max({v,u,n});     
    }
    int st=1;
    for(int i=1;i<=n;i++)
    {
        if(du[i]%2==1)
        {
            st=i;break;
        }
    }
    dfs(st);
    for(int i=tot;i>=1;i--)
    {
        cout<<ans[i]<<endl;
    }
    return 0;
}

by fengzhaoyu @ 2024-05-01 15:21:05

当然楼上做法也可以


by fengzhaoyu @ 2024-05-01 15:21:53

@liyishao1125


|