How Many Answers Are Wrong HDU - 3038-(边带权并查集)

利用路径压缩来统计每个节点到树根之间路径上的一些信息(边带权)

总结

第一次交上去的WA了一次
测试数据中有一个询问时6 6 1,并查集考虑的边权问题,也就是结点到某一个结点的距离,但是这里6到6显然时没有边,所以L–,也就是5到6区间和为1,那么dis[5]=0,dis[6]=1;平时用数据模拟那就不用考虑边的关系,只考虑下标就行。

const int N=2e5+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;
}
signed main()
{
    IOS;
    //file();
    int n,m;
    while(cin>>n>>m)
    {
        int ans=0;
        for(int i=1; i<=n; i++)
            fat[i]=i,dis[i]=0;
        while(m--)
        {
            int l,r,v;
            cin>>l>>r>>v;
            l--;///自己WA的点
            int tl=find(l);
            int tr=find(r);
            if(tl==tr)
            {
                int len=dis[r]-dis[l];
                if(len!=v)
                    ans++;
            }
            else
            {
                fat[tr]=tl;
                dis[tr]=v+dis[l]-dis[r];
            }
        }
        cout<<ans<<endl;
    }
    return 0;
}
发布了130 篇原创文章 · 获赞 5 · 访问量 4993

猜你喜欢

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