求助
查看原帖
求助
800499
suzhikz楼主2024/9/12 20:35
#include<bits/stdc++.h>
#define ll long long
#define reg register
#define db double
#define il inline
using namespace std;
int n,m; 
vector<int>g[500005];
int ans[500005],cnt;
void dfs(int x,int fa){
	ans[++cnt]=x;
	for(auto i:g[x]){
		if(i==fa)continue;
		dfs(i,x);
	}
}
bool ring[500005];
bool vis[500005];
int fa[500005];
bool flag;
void dfsring(int x,int f){
//	cout<<x<<"a"<<endl;
	if(flag)return;
	fa[x]=f;
	for(auto i:g[x]){
		if(i==f)continue;
		if(fa[i]==0){
			dfsring(i,x);
		}else{
			fa[i]=x;
			flag=1;
			while(!ring[x]){
//				cout<<x<<endl;
				ring[x]=1;x=fa[x];
			}
		}
	}
}
int minn,id;
bool dao,use;
void work(int x){
	if(!vis[x])
	ans[++cnt]=x;
	vis[x]=1;
	for(int i=0;i<g[x].size();i++){
		int y=g[x][i];
		if(vis[y])continue;
		if(use){
			cout<<y<<endl;exit(0); 
		}
//		cout<<x<<' '<<minn<<endl;
		if(ring[y]==1){
			if(i!=g[x].size()-1){
				id=x;
				minn=g[x][i+1];
			}
		}
		if(i==g[x].size()-1&&ring[x]&&ring[y]&&id!=x){
			if(y>minn&&use==0){
				use=1;
				work(id);
//				cout<<"use";
			}
		}
		work(y);
	}
}
int main(){
	scanf("%d%d",&n,&m);
	for(reg int u,v,i=1;i<=m;i++){
		scanf("%d%d",&u,&v);
		g[u].push_back(v);g[v].push_back(u);
	}
	for(int i=1;i<=n;i++){
		sort(g[i].begin(),g[i].end());
	}
//	cout<<endl;
	if(m==n-1){
		dfs(1,0);
	}else{
		dfsring(1,-1);
		work(1);
	}
	for(int i=1;i<=n;i++)printf("%d ",ans[i]);
//	cout<<id<<endl;
	return 0;
}

2024/9/12 20:35
加载中...