RT,本蒟蒻使用 O(n2) 的算法,不吸氧最后3个点会LTE,吸了才能AC,有没有大佬能帮忙优化成不吸氧的qwq
#include<bits/stdc++.h>
using namespace std;
int ans[110001],atot,lst[110001];
int poi[110001],to[110001],next[110001],tot,u[110001],v[110001];
int delu,delv;
bool vis[110001];
inline void addt(int x,int y){
tot++;
next[tot]=poi[x];poi[x]=tot;to[tot]=y;
}
inline void dfs(int x,int fat){
atot++;
ans[atot]=x;
int fn[5001],ftot=0;
for(register int e=poi[x];e;e=next[e]){
if(to[e]==fat)continue;
ftot++;
fn[ftot]=to[e];
}
sort(fn+1,fn+1+ftot);
for(register int i=1;i<=ftot;i++)
dfs(fn[i],x);
}
inline bool dfs2(int x,int fat){
vis[x]=1;
atot++;
ans[atot]=x;
int fn[5001],ftot=0;
for(register int e=poi[x];e;e=next[e]){
if((to[e]==fat) or (x==delu and to[e]==delv) or (x==delv and to[e]==delu))continue;
if(vis[to[e]])return 0;
vis[to[e]]=1;
ftot++;
fn[ftot]=to[e];
}
sort(fn+1,fn+1+ftot);
for(register int i=1;i<=ftot;i++){
if(!dfs2(fn[i],x))return 0;
}
return 1;
}
inline int read(){
char c=getchar();
int s=0,f=1;
while(c<'0' or c>'9'){
if(c=='-')f=-1;
c=getchar();
}
while(c>='0' and c<='9'){
s=(s<<1)+(s<<3)+c-'0';
c=getchar();
}
return s*f;
}
int main(){
int n,m;
n=read();m=read();
for(register int i=1;i<=m;i++){
u[i]=read();v[i]=read();
addt(u[i],v[i]);
addt(v[i],u[i]);
}
if(m==n-1){
dfs(1,0);
for(register int i=1;i<=n;i++)
printf("%d ",ans[i]);
}else{
for(register int i=1;i<=n;i++)
lst[i]=n-i+1;
for(register int i=1;i<=m;i++){
atot=0;
memset(vis,0,sizeof(vis));
delu=u[i];delv=v[i];
dfs2(1,0);
if(atot==n){
bool flag=0;
for(register int i=1;i<=n;i++){
if(ans[i]>lst[i])break;
if(ans[i]<lst[i]){
flag=1;
break;
}
}
if(flag){
for(register int i=1;i<=n;i++)
lst[i]=ans[i];
}
}
}
for(register int i=1;i<=n;i++)
printf("%d ",lst[i]);
}
return 0;
}