一道很简单的题求助(悬关)
查看原帖
一道很简单的题求助(悬关)
300166
Zikl楼主2023/11/3 22:58

我不知道为什么 WA 了,哪个大佬可以指点迷津。

我看思路都没有问题。。。

如果您能帮我,我将致以最诚挚的感谢。(因为这道题我调了好久好久

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<vector>
#include<queue> 
#include<cstring> 
#include<cmath>
#define int long long
const int N=1e5;
using namespace std;
int n,m,fa[N],ans[N];
int head[N*4],ver[N*4],Next[N*4],edg[N*4],tot;
int find(int x){
	if(fa[x]==x) return x;
	return fa[x]=find(fa[x]);
}
void add(int x,int y,int z){
	ver[++tot]=y,edg[tot]=z;
	Next[tot]=head[x],head[x]=tot;
}
void dfs(int x,int fa){
	for(int i=head[x];i;i=Next[i]){
		int y=ver[i],yy=edg[i];
		if(y==fa) continue;
		if(ans[x]==yy) ans[y]=yy+1;
		else ans[y]=yy;
		dfs(y,x);
	}
}
signed main(){
	cin>>n>>m;
	for(int i=1;i<=n;i++) fa[i]=i;
	for(int i=1;i<=m;i++){
	int u,v,w;
	cin>>u>>v>>w;
	int fu=find(u),fv=find(v);
	if(fu==fv) continue;
	fa[fu]=fv;
	add(u,v,w);
	add(v,u,w);
	}
	int bb=find(1);
	for(int i=2;i<=n;i++) 
	if(find(i)!=bb){
		cout<<"No";
		return 0;
	}
	
	ans[1]=1;
	dfs(1,0);
	for(int i=1;i<=n;i++)cout<<ans[i]<<endl;
	return 0;
} 
2023/11/3 22:58
加载中...