NumberTrart @ 2024-05-16 21:40:28
#include <algorithm>//STL 通用算法
#include <cstdio>//定义输入/输出函数
#include <cstring>//字符串处理
#include <iostream>//数据流输入/输出
#include <vector>//STL 动态数组容器
using namespace std;
int m;
int g[505][505],nxt[505][505],lst[505][505];
int in[505];
int z=1;
int a[1036];
int maxx,minn=2e9;
bool dfs(int p,int dep)
{
if(dep==m+1)
{
for(int i=1;i<=m;i++) cout<<a[i]<<'\n';
cout<<p<<'\n';
return true;
}
a[dep]=p;
for(int i=nxt[p][0];i<=500;i=nxt[p][i])
if(g[p][i])
{
g[p][i]--;
g[i][p]--;
if(!g[p][i])
{
lst[p][nxt[p][i]]=lst[p][i];
nxt[p][lst[p][i]]=nxt[p][i];
}
if(dfs(i,dep+1)) return true;
if(!g[p][i])
{
lst[p][nxt[p][i]]=i;
nxt[p][lst[p][i]]=i;
}
g[i][p]++;
g[p][i]++;
}
return false;
}
int main(){
ios::sync_with_stdio(false);
cin>>m;
for(int i=1;i<=m;i++)
{
int u,v;
cin>>u>>v;
g[u][v]++;
g[v][u]++;
maxx=max(maxx,max(u,v));
minn=min(minn,min(u,v));
in[u]++;
in[v]++;
}
for(int i=minn;i<=maxx;++i)
{
int head=0;
for(int j=minn;j<=maxx;++j)
if(g[i][j])
{
nxt[i][head]=j;
lst[i][j]=head;
head=j;
}
nxt[i][head]=501;
lst[i][501]=head;
}
//for(int i=1;i<=500;i++) sort(g[i].begin(),g[i].end());
for(int i=minn;i<=maxx;i++)
if(in[i]&1){
z=i;
break;
}
dfs(z,1);
return 0;
}
链表都用了还TLE……