1375:骑马修栅栏(fence)
题解参考至shake_jake
本来想优化优化的,然后就...
提交了18次┭┮﹏┭┮(至死也没明白为什么wrong了?)。
#include<iostream>
#include<algorithm>
#include<cstdio>
using namespace std;
const int N=1030;
int m,n,a[N][N],d[N],ans[N],tot;
void dfs(int i){
for(int j=1;j<=m;j++){
if(a[i][j]){
a[i][j]--;
a[j][i]--;
dfs(j);
// break; 不可以去除
}
}
ans[++tot]=i;
}
int main(){
cin>>n;
while(n--){
int x,y;
scanf("%d%d",&x,&y);
a[x][y]++;
a[y][x]++;
d[x]++;
d[y]++;
m=max(m,max(x,y));
}
int start=0;
for(int i=1;i<=m;i++){
if(d[i]%2){
start=i;
break;
}
}
if(!start){
for(int i=1;i<=m;i++){
if(d[i]){
start=i;
break;
}
}
}
dfs(start);//从奇度处开始
for(int i=tot;i>0;i--)
printf("%d\n",ans[i]);
}