先找环再dfs,调了好久还是wa要碎了QwQ
#include<bits/stdc++.h>
using namespace std;
const int N = 5e3+50;
int n,m,x,y,tot,h[N][2];
int cnt,a[N],f[N],rk,dfn[N];
vector<int> vis[N];
bool flag;
void findh(int u,int fa) {
f[u] = fa;
dfn[u]=++rk;
for(auto v:vis[u]) {
if(v==fa)continue;
if(dfn[v]) {
if(dfn[v]<dfn[u])continue;
h[++tot][0] = u,h[tot][1] = v;
for(;v!=u;v=f[v]) {
h[++tot][0] = f[v],h[tot][1] = v;
}
}else{
f[v] = u,findh(v,u);
}
}
}
void dfs(int u,int fa){
for(auto v:vis[u]){
if(flag==-1)return ;
if(v==fa)continue;
if((v==x&&u==y)||(v==y&&u==x)){
continue;
}
++cnt;
if(flag==1||v<a[cnt]){
flag = 1;
a[cnt] = v;
dfs(v,u);
}else if(v>a[cnt]){
flag = -1;
return ;
}else{
dfs(v,u);
}
}
}
int main(){
scanf("%d%d",&n,&m);
for(int i = 1;i<=m;++i){
scanf("%d%d",&x,&y);
vis[x].push_back(y);
vis[y].push_back(x);
}
for(int i = 1;i<=n;++i){
sort(vis[i].begin(),vis[i].end());
}
cnt = 0;
memset(a,0x3f,sizeof(a));
a[++cnt] = 1;
if(m==n-1){
x = y = 0;
flag = 0;
dfs(1,0);
for(int i = 1;i<=n;++i){
printf("%d ",a[i]);
}
return 0;
}
findh(1,0);
for(int i = 1;i<=tot;++i){
flag = 0;
cnt = 1;
x = h[i][0],y=h[i][1];
dfs(1,0);
}
for(int i = 1;i<=n;++i){
printf("%d ",a[i]);
}
return 0;
}