对不起,我是标题党。
各位奆佬们帮帮我这个蒟蒻啊TAT
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
const int N=5002;
vector<int> v[N];
int ans[N],res[N];
int From[N],To[N];
bool st[N];
int cnt,Dx,Dy;
int n,m;
void dfs(int Now,int From)
{
if(st[Now]) return;
st[Now]=1;
ans[++cnt]=Now;
for(int i=0;i<v[Now].size();++i)
dfs(v[Now][i],Now);
}
void dfs1(int Now,int From)
{
if(st[Now]) return;
st[Now]=1;
res[++cnt]=Now;
for(int i=0;i<v[Now].size();++i)
{
if(!(Now==Dx&&v[Now][i]==Dy||Now==Dy&&v[Now][i]==Dx))
dfs(v[Now][i],Now);
}
}
bool Check()
{
for(int i=1;i<=n;++i)
{
if(res[i]<ans[i]) return 1;
else if(res[i]>ans[i]) return 0;
}
return 0;
}
void Update()
{
for(int i=1;i<=n;++i)
ans[i]=res[i];
}
signed main()
{
ios::sync_with_stdio(0);
cin.tie(0);cout.tie(0);
cin>>n>>m;
for(int i=1;i<=m;++i)
{
int x,y;
cin>>x>>y;
v[x].push_back(y);
v[y].push_back(x);
From[i]=x,To[i]=y;
}
for(int i=1;i<=n;++i)
sort(v[i].begin(),v[i].end());
if(m==n-1)
{
dfs(1,0);
}
else
{
for(int i=0;i<=n+1;++i)
{
ans[i]=114514;
}
for(int i=1;i<=m;++i)
{
for(int j=0;j<=n+1;++j)
{
st[j]=0;
res[j]=0;
}
cnt=0;
Dx=From[i],Dy=To[i];
dfs1(1,0);
if(cnt<n) continue;
if(i==1||Check()) Update();
}
}
for(int i=1;i<=n;i++)
cout<<ans[i]<<' ';
return 0;
}