P2731 [USACO3.3]骑马修栅栏 Riding the Fences
本应很简单的东西。。。
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
int u,v;
int m;
int fr[5001][5001];
int ans[10205];
int p;
int a;
int maxn;
int du[10205];
int minn=1e6;
int f=0;
void dfs(int now){
for(int i=minn;i<=maxn;++i){
if(fr[now][i]){
fr[now][i]--;
fr[i][now]--;
dfs(i);
}
}
p++;
ans[p]=now;
return ;
}
int main(){
scanf("%d",&m);
for(int i=1;i<=m;++i){
scanf("%d%d",&u,&v);
fr[u][v]++;
fr[v][u]++;
maxn=max(maxn,max(u,v));
minn=min(minn,min(u,v));
du[u]++;
du[v]++;
}
for(int i=minn;i<=maxn;++i){
if(du[i]%2){
dfs(i);
for(int i=p;i>=1;--i){
cout<<ans[i]<<endl;
}
return 0;
}
}
dfs(1);
for(int i=p;i>=1;--i)
cout<<ans[i]<<endl;
return 0;
}