Zjnu Stadium HDU - 3047(边带权并查集)

总结

注意负数的处理
注意多组测试案例,自己当时没注意,HDU居然给我显示的是WA,而不是TLE
其他也就是叶子结点到根距离的处理

const int N=5e4+5;
int fat[N],dis[N];
int find(int x)
{
    if(fat[x]==x)
        return x;
    int root=find(fat[x]);
    dis[x]+=dis[fat[x]];
    return fat[x]=root;
}
int mod(int x)
{
    return (x%300+300)%300;
}
signed main()
{
    IOS;
    //file();
    int n,m;
    while(cin>>n>>m)
    {
        for(int i=1; i<=n; i++)
            fat[i]=i,dis[i]=0;
        int ans=0;
        while(m--)
        {
            int a,b,x;
            cin>>a>>b>>x;
            int ta=find(a);
            int tb=find(b);
            if(ta==tb)
            {
                int num=mod(dis[b]-dis[a]);
                if(num!=x%300)
                    ans++;
            }
            else
            {
                fat[tb]=ta;
                dis[tb]=dis[a]+x-dis[b];
            }
        }
        cout<<ans<<endl;
    }
    return 0;
}
发布了130 篇原创文章 · 获赞 5 · 访问量 4994

猜你喜欢

转载自blog.csdn.net/weixin_44224825/article/details/104240330
今日推荐