68pts求调+悬小号关
查看原帖
68pts求调+悬小号关
1615478
SRQ_321楼主2025/6/18 13:13
#include<bits/stdc++.h>
#define in scanf
#define out printf
#define pre(i,a,b) for(int i=(a);i<=(b);i++)
#define bre(i,a,b) for(int i=(a);i>=(b);i--)
#define gre(i,a) for(auto i:a)
#define wl while
#define aya long long
#define x1 xxxsssxxx
#define x0 xxxxsxxxx
#define y1 yyysssyyy
#define y0 yyyysyyyy
#define clean(a) wl(!a.empty()){a.pop();}
#define inf 0x3f3f3f3f
#define lnf 0x3f3f3f3f3f3f3f3f
using namespace std;
int n,m,flag[5005],cnt;
vector<int> g[5005];
void dfs(int u){
	out("%d ",u);
	flag[u]=1;
	gre(v,g[u]){
		if(!flag[v]){
			dfs(v);
		}
	}
}
void Dfs(int u,int fa,int id){
	if(cnt!=n) out("%d ",u),cnt++;
	if(cnt==n){
		return;
	}
	flag[u]=1;
	pre(i,0,g[u].size()-1){
		if(cnt==n){
			return;
		}
		if(!flag[g[u][i]]){
			if(fa!=-1&&id+1<g[fa].size()&&!flag[g[fa][id+1]]){
				if(g[fa][id+1]<g[u][i]){
					Dfs(g[fa][id+1],fa,id+1);
					continue;
				}
			}
			Dfs(g[u][i],u,i);
		}
	}
}
void solve(){
	in("%d%d",&n,&m);
	pre(i,1,m){
		int u,v;
		in("%d%d",&u,&v);
		g[u].push_back(v);
		g[v].push_back(u);
	}
	pre(i,1,n){
		sort(g[i].begin(),g[i].end());
	}
	if(n!=m) dfs(1);
	else Dfs(1,-1,-1);
	return;
}
int main(){
	ios::sync_with_stdio(0);
	cin.tie(0),cout.tie(0);
	int t=1;
	pre(i,1,t){
		solve();
	}
	return 0;
}
2025/6/18 13:13
加载中...