加强版过了,88pts,WA on #24 25 26
查看原帖
加强版过了,88pts,WA on #24 25 26
661913
liwenxi114514楼主2025/2/3 14:52
#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,m,a[500005],cnt,rd[500005],maxn;
bool vis[500005],flag;
vector<int> v[500005];
void dfs(int x,int fa){
	a[++cnt]=x;
	for(int i=0;i<v[x].size();i++){
		int y=v[x][i];
		if(y!=fa){
			dfs(y,x);
		}
	}
}
void top_sort(){
	queue<int> q;
	for(int i=1;i<=n;i++){
		if(rd[i]==1){
			q.push(i);
		}
	}
	while(!q.empty()){
		int x=q.front();
		q.pop();
		for(int i=0;i<v[x].size();i++){
			int y=v[x][i];
			rd[y]--;
			if(rd[y]==1){
				q.push(y);
			}
		}
	}
}
void dfs1(int x){
	vis[x]=1;
	a[++cnt]=x;
	if(rd[x]==2){
		bool ll=0;
		if(!flag){
			for(int i=0;i<v[x].size();i++){
				int y=v[x][i];
				if(!vis[y]){
					if(rd[y]==2){
						i++;
						while(i<v[x].size()&&vis[v[x][i]]){
							i++;
						}
						if(i!=v[x].size()){
							maxn=v[x][i];
						}else if(y>maxn){
							flag=1;
							ll=1;
							break;
						}
					}
				}
			}
		}
		for(int i=0;i<v[x].size();i++){
			int y=v[x][i];
			if(ll&&rd[y]==2){
				continue;
			}
			if(!vis[y]){
				dfs1(y);
			}
		}
	}else{
		for(int i=0;i<v[x].size();i++){
			int y=v[x][i];
			if(!vis[y]){
				dfs1(y);
			}
		}
	}
}
signed main(){
	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);
		rd[x]++;
		rd[y]++;
	}
	for(int i=1;i<=n;i++){
		sort(v[i].begin(),v[i].end());
	}
	if(m==n-1){
		dfs(1,-1);
		for(int i=1;i<=n;i++){
			cout<<a[i]<<" ";
		}
	}else{
		top_sort();
		dfs1(1);
		for(int i=1;i<=n;i++){
			cout<<a[i]<<" ";
		}
	}
	return 0;
}
2025/2/3 14:52
加载中...