http://codeforces.com/contest/1095/problem/D
以为很难呢,原来是这个意思。
既然保证有解,那首先输出1,对于1后面的两个人,x1和x2,若x1不在x2后面,输出x1,否则输出x2。如此循环一遍,就把答案输出了。心怀忐忑地交上去,果然wa了,看了一下数据,原来这个想法对n=3不适用,因为只有三个人,输第三个的时候可能发现第一个在第三个后面,第三个又在第一个后面。。。所以特殊处理一下。。。
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
int N,x;
struct node
{
int x1,x2;
}a[200005];
int main()
{
cin>>N;
for(int i=1;i<=N;i++)cin>>a[i].x1>>a[i].x2;
int idx1=1,idx2,cnt=0;
if(N==3)
{
cout<<"1 2 3";
/*if(a[idx1].x1!=a[a[idx1].x2].x1&&a[idx1].x1!=a[a[idx1].x2].x2)idx2=a[idx1].x1;
else idx2=a[idx1].x2;
cout<<idx1<<" "<<idx2<<" ";
if(a[idx1].x1!=idx2)cout<<a[idx1].x1;
else cout<<a[idx1].x2;*/
return 0;
}
while(cnt!=N)
{
cnt++;
cout<<idx1<<" ";
if(a[idx1].x1!=a[a[idx1].x2].x1&&a[idx1].x1!=a[a[idx1].x2].x2)idx2=a[idx1].x1;
else idx2=a[idx1].x2;
int d=idx2==a[idx1].x1?a[idx1].x1:a[idx1].x2;
idx1=idx2;
idx2=d;
}
return 0;
}