88分求调
查看原帖
88分求调
545873
starlife楼主2023/3/6 14:06

3TLE

#include<bits/stdc++.h>
using namespace std;
vector<int>G[5005];
int n,m,cnt;
int vis[5005];
int k[5005],ans[5005];
int x,y;
inline int read()
{
	int x=0,f=1;char ch=getchar();
	while (ch<'0'||ch>'9'){if (ch=='-') f=-1;ch=getchar();}
	while (ch>='0'&&ch<='9'){x=x*10+ch-48;ch=getchar();}
	return x*f;
}
inline void dfs2(int u,int fa){
	if(vis[u]){
		return;
	}
	vis[u]=1;
	k[++cnt]=u;
	for(int i=0;i<G[u].size();i++){
		int v=G[u][i];
		if(x == u && y == v){
			continue;
		}
		if(x == v && y == u){
			continue;
		}
		if(v==fa){
			continue;
		}
		dfs2(v,u);
	}
}
inline void update(){
	for(int i=1;i<=n;i++){
		ans[i] = k[i];
	}
}
inline void check(){
	if(ans[1] == 0){
		update();
		return;
	}
	for(int i=1;i<=n;i++){
		if(k[i] > ans[i]){
			return;
		}
		if(k[i] < ans[i]){
			update();
			return;
		}
	}
	return; 
}
int main(){
	n = read();m = read();
	for(int i=1;i<=m;i++){
		int u,v;
		u = read();v = read();
		G[u].push_back(v);
		G[v].push_back(u);
	}
	for(int i = 1;i<=n;i++){
		sort(G[i].begin(),G[i].end());
	}
	if(m == (n-1)){
		dfs2(1,0);
		update();
	}
	if(m==n){
		for(int i=1;i<=n;i++){
			for(int j = 0;j<G[i].size();j++){
				memset(vis,0,sizeof(vis));
				cnt = 0;
				x = i;
				y = G[i][j];
				dfs2(1,0);
				if(cnt<n) continue;
				check();
			}
		}
	}
	for(int i=1;i<=n;i++){
		cout << ans[i] << " ";
	}
	return 0;
}
2023/3/6 14:06
加载中...