原題連結
題解
貪心走最小的點,由於每個點都有偶數條邊,所以能進入就一定能出去
code
#include<bits/stdc++.h>
using namespace std;
struct node
{
int to,id;
};
vector<node> G[505];
int late[505]={0};
int vis[1044]={0};
int start=1,finish;
stack<int> st;
int n,m;
void ss(int now)
{
for(int i=late[now];i<G[now].size();i=late[now])
{
late[now]=i+1;
int to=G[now][i].to,id=G[now][i].id;
if(!vis[id])
{
vis[id]=1;
ss(to);
}
}
st.push(now);
}
int main()
{
cin>>m;
for(int i=1;i<=m;i++)
{
int u,v;
cin>>u>>v;
G[u].push_back({v,i});
G[v].push_back({u,i});
n=max(n,u);
n=max(n,v);
}
int flag=0;
for(int i=1;i<=n;i++)
{
sort(G[i].begin(),G[i].end(),[](const node &a,const node &b){return a.to<b.to;});
int con=G[i].size();
if(con&1)
{
if(!flag)
{
start=i;
flag=1;
}
else
{
finish=i;
}
}
}
ss(start);
while(st.size())
{
cout<<st.top()<<endl;
st.pop();
}
return 0;
}