hdu3047 带权并查集

来源:互联网 发布:网络兼职诈骗判刑案例 编辑:程序博客网 时间:2024/06/04 18:45

带权并查集

#include <iostream>#include <cstring>using namespace std;int father[50005];int rank[50005];int n,m;int find(int x){    if (x == father[x])        return x;    int t = father[x];    father[x] = find(father[x]);    rank[x] = rank[x] + rank[t];    return father[x];}void init(){    memset(rank,0,sizeof(rank));    for (int i=1; i<=n; i++)        father[i] = i;}int Union(int a,int b,int s){    int x = find(a);    int y = find(b);    if (x == y)    {        if (rank[a]+s != rank[b])            return 0;        else                return 1;    }    father[y] = x;    rank[y] = rank[a]+s-rank[b];    return 1;}int main(){    while (cin>>n>>m)    {        init();        int sum = 0;        for (int i=1; i<=m; i++)        {            int a,b,s;            cin>>a>>b>>s;            if (!Union(a,b,s))                sum++;        }        cout<<sum<<endl;    }    return 0;}


0 0
原创粉丝点击