我不知道为什么 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;
}