题面
https://www.luogu.org/problem/P5022
题解
#include<iostream> #include<vector> #include<cstdio> #include<algorithm> #include<cstring> using namespace std; struct node{ int u,v; } a[5050]; int n,m,miy[5050],ans[5050],cnt,canu,canv; vector <int> to[5050]; bool vis[5050]; void dfs(int x){ int i,l=to[x].size(); miy[++cnt]=x; vis[x]=true; for (i=0;i<l;i++) if (!vis[to[x][i]]) dfs(to[x][i]); } bool ok(){ int i; if (cnt<n) return false; for (i=1;i<=n;i++) if (ans[i]<miy[i]) return true; else if (ans[i]>miy[i]) return false; return false; } void dfs2(int x){ int i,l=to[x].size(); ans[++cnt]=x; vis[x]=true; for (i=0;i<l;i++) if (!vis[to[x][i]]) { if (canu==x && canv==to[x][i] || canv==x && canu==to[x][i]) ; else dfs2(to[x][i]); } } int main(){ int i,j; scanf("%d %d",&n,&m); for (i=1;i<=m;i++) { scanf("%d %d",&a[i].u,&a[i].v); to[a[i].u].push_back(a[i].v); to[a[i].v].push_back(a[i].u); } for (i=1;i<=n;i++) sort(&to[i][0],&to[i][0]+to[i].size()); if (m==n-1) { cnt=0; dfs(1); for (i=1;i<=n;i++) printf("%d ",miy[i]); return 0; } miy[1]=987654321; for (i=1;i<=m;i++) { memset(vis,0,sizeof(vis)); canu=a[i].u; canv=a[i].v; cnt=0; dfs2(1); if (ok()) for (j=1;j<=m;j++) miy[j]=ans[j]; } for (i=1;i<=n;i++) printf("%d ",miy[i]); return 0; }