zoukankan      html  css  js  c++  java
  • hdu 3038 How Many Answers Are Wrong 并查集

    题目大致意思:第一行输入n,m,表示有共有n个数字,下面会有m行操作。每次输入ai,bi,si表示从ai到bi的和为si,最后输出有m次中有几次和上面的有冲突。

    !!!!!!sum【x】表示从x的父节点到达x的值

    #include <stdio.h>
    #include <string.h>
    using namespace std;
    const int MAXN=200010;
    int p[MAXN];//保存每个数字的父节点
    int sum[MAXN];//保存每个数字的父节点与自己本身之间的和
    int Find(int x)
    {
        if(x!=p[x])
        {
            int tmp=Find(p[x]);//保存父节点
            sum[x]+=sum[p[x]];//更新本身到达父节点的值
            p[x]=tmp;
        }
        return p[x];
    }
    int main()
    {
        int n,m;
        int u,v,w;
        while(~scanf("%d%d",&n,&m))
        {
            for(int i=1;i<=n;i++)
            {
                p[i]=i;
            }
            memset(sum,0,sizeof(sum));
            int ans=0;
            while(m--)
            {
                scanf("%d%d%d",&u,&v,&w);
                u=u-1;//让左端点-1可以更好的操作数组,比如u=5,v=8,w=4,那么w是前八个数的和减去前四个数的和 即从第五个数到第八个数的和
                int t1=Find(u);
                int t2=Find(v);//分别找到u,v的父节点。
                if(t1!=t2)//不相同表示不在一起
                {
                    p[t2]=t1;//合并
                    sum[t2]=sum[u]-sum[v]+w;//不理解可以画图表示一下
                }
                else
                {
                    if(sum[v]-sum[u]!=w)//起点相同那么不满足sum[v]-sum[u]==w就是与之前的有冲突
                        ans++;
                }
            }
            printf("%d
    ",ans);
        }
        return 0;
    }
  • 相关阅读:
    H2嵌入式数据库的各种连接方式
    大数据平台建设的思考
    hive中的一些参数
    sqoop job 踩过的坑
    【转】awk、nawk、mawk、gawk的简答介绍
    awk用法
    hive 中窗口函数row_number,rank,dense_ran,ntile分析函数的用法
    hive中order by,sort by, distribute by, cluster by的用法
    python连接mysql
    pycharm注册码
  • 原文地址:https://www.cnblogs.com/mengzhong/p/4676462.html
Copyright © 2011-2022 走看看