HDU3047(带权并查集)

来源:互联网 发布:大数据平台运维管理 编辑:程序博客网 时间:2024/06/07 09:40

 

#include <iostream>#include <cstdio>using namespace std;int parent[50005];int rank[50005];int X;int getpar(int a){if (parent[a]!=a){int tempar=parent[a];parent[a]=getpar(parent[a]);rank[a]=(rank[a]+rank[tempar])%300;}return parent[a];}void unio(int x,int y){int xp=getpar(x);int yp=getpar(y);parent[yp]=xp;if (rank[y]<=rank[x]+X)rank[yp]=(rank[x]+X-rank[y])%300;elserank[yp]=300-(rank[y]-(rank[x]+X));}int main(){int n,m,i,a,b;int ans=0;scanf("%d%d",&n,&m);for (i=1;i<=n;i++)parent[i]=i;for (i=0;i<m;i++){scanf("%d%d%d",&a,&b,&X);int ap=getpar(a);int bp=getpar(b);if (ap==bp && (rank[a]+X)%300!=rank[b])ans++;elseunio(a,b);}printf("%d\n",ans);}


 

0 0