总算碰到一道不那么无聊的题了^^
先说一下题意吧,有两个人一个叫TT的男孩一个叫FF的女孩(名字太随意了吧。。。。),这个叫TT的男孩会经常叫这个女孩一起玩一个游戏,这个有些是这样的,随便写一个数列,现在TT会选择一个区间,然后让FF计算这个区间里面所有数的和,这是一个非常非常无聊的游戏,于是FF准备捉弄一下TT,有时候她会故意计算出来一个错的答案,当然TT也比较聪明,他会发现这个答案跟以前的答案会有冲突,那么问题来了,有多少话是假的呢???
//////////////////////////////////////////////////////
猛然一看这题跟并查集貌似没有什么毛线关系啊,不过仔细观察可以发现既然要判断矛盾就肯定知道与以前的数据有冲突的地方,因为没有说这个数列是不是正整数所以冲突的方式只有一种,比如先说了连个区间
1-10 10
1-5 2
6-10 5
跟明显第三句话就可以看出来问题了,第二个加第三个跟第一个不相等,但是他们表述的区间都是相同的,所以产生矛盾,不过这种矛盾应该怎么判断呢,我们可以以它的端点为点建立一个集合,他们的根就是能到达的最左端,如果都有相同的最左端那么就可以判断一下是否有矛盾产生。

比如上面这个图, 我们已经知道了AB的长度和AC的长度,如果下面再来一个CB,我们就可以知道C的最左端是A,B的最左端也是A,那么就可以判断一个AC+CB的长度是不是等于AB的长度就可以了。。。。
如果最左端不相同的话合并的时候要先比较一下最左端是哪个
/////////////////////////////////////////////////////////////////
 
#include<stdio.h>

const int maxn  = 200005;

int f[maxn], val[maxn];//val记录下标所能到达最左端的值

int Find(int x)
{
    int k = f[x];     if(f[x] != x)
    {
        f[x] = Find(f[x]);
        val[x] += val[k];
    }     return f[x];
} int main()
{
    int N, M;     while(scanf("%d%d", &N, &M) != EOF)
    {
        int i, u, v, w, ans=0;         for(i=0; i<=N; i++)
        {
            f[i] = i;
            val[i] = 0;
        }         while(M--)
        {
            scanf("%d%d%d", &u, &v, &w);
            u = u-1;//注意为什么要减一
            
            int ru = Find(u), rv = Find(v);
           
            if(ru == rv && val[u]+w != val[v])
                ans++;
            else if(ru < rv)
            {
                f[rv] = ru;
                val[rv] = val[u] - val[v] + w;
            }
            else if(ru > rv)
            {
                f[ru] = rv;
                val[ru] = val[v] - val[u] - w;
            }
        }         printf("%d\n", ans);
    }     return 0;
}

D - How Many Answers Are Wrong(hdu 3038)的更多相关文章

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

    题目链接 并查集是用来对集合合并查询的一种数据结构,或者判断是不是一个集合,本题是给你一系列区间和,判断给出的区间中有几个是不合法的. 思考: 1.如何建立区间之间的联系 2.如何发现悖论 首先是如何 ...

  2. 2道acm编程题(2014):1.编写一个浏览器输入输出(hdu acm1088);2.encoding(hdu1020)

    //1088(参考博客:http://blog.csdn.net/libin56842/article/details/8950688)//1.编写一个浏览器输入输出(hdu acm1088)://思 ...

  3. Bestcoder13 1003.Find Sequence(hdu 5064) 解题报告

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5064 题目意思:给出n个数:a1, a2, ..., an,然后需要从中找出一个最长的序列 b1, b ...

  4. 2013 多校联合 F Magic Ball Game (hdu 4605)

    http://acm.hdu.edu.cn/showproblem.php?pid=4605 Magic Ball Game Time Limit: 10000/5000 MS (Java/Other ...

  5. (多线程dp)Matrix (hdu 2686)

    http://acm.hdu.edu.cn/showproblem.php?pid=2686     Problem Description Yifenfei very like play a num ...

  6. War Chess (hdu 3345)

    http://acm.hdu.edu.cn/showproblem.php?pid=3345 Problem Description War chess is hh's favorite game:I ...

  7. 2012年长春网络赛(hdu命题)

    为迎接9月14号hdu命题的长春网络赛 ACM弱校的弱菜,苦逼的在机房(感谢有你)呻吟几声: 1.对于本次网络赛,本校一共6名正式队员,训练靠的是完全的自主学习意识 2.对于网络赛的群殴模式,想竞争现 ...

  8. BestCoder Round #69 (div.2) Baby Ming and Weight lifting(hdu 5610)

    Baby Ming and Weight lifting Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K ( ...

  9. BestCoder Round #68 (div.2) geometry(hdu 5605)

    geometry Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Su ...

随机推荐

  1. UTF-8和GBK有什么区别?

    字符均使用双字节来表示,只不过为区分中文,将其最高位都定成1. 至于UTF-8编码则是用以解决国际上字符的一种多字节编码,它对英文使用8位(即一个字节),中文使用24位(三个字节)来编码.对于英文字符 ...

  2. wpf 窗体中显示当前系统时间

    先看一下效果: 这其实是我放置了两个TextBlock,上面显示当前的日期,下面显示时间. 接下来展示一下代码: 在XAML中: <StackPanel Width="205" ...

  3. 解决办法:CMake编译时出现“error in configuration process project files may be invalid”

    无论是CMake2.84 还是当前最新的CMake2.87都可能会出现这种错: 查遍国内外的网上都没有给出可行办法,结果还是自己解决了 现把出错原因和解决办法如下:出错原因:因是英文版本,通常安装没有 ...

  4. 读书笔记之 - javascript 设计模式 - 单体模式

    单体是一个用来划分命名空间,并将一批相关方法和属性组织在一起的对象,如果它可以被实例化,那么它只能被实例化一次. 单体模式,就是将代码组织为一个逻辑单元,这个逻辑单元中的代码可以通过单一的变量进行访问 ...

  5. Oracle IN 传递字符串参数查询失效

    在写存储过程中有如下代码: FOR a IN ( SELECT a.svo_no,a.AUDIT_NO,a.order_id FROM TT_PI_MODEL_REL a ) LOOP SELECT ...

  6. [FindBugs分析记录]Redundant nullcheck of o,which is known to be non-null

    官网解释: This method contains a redundant check of a known non-null value against the constant null. 这种 ...

  7. 页面插入Flash方式

    法一 <!-- 播放Flash动画代码 --> <div class="logoFlash"> <object classid="clsid ...

  8. 实用的透明背景mark图标

  9. JS Math.sin() 与 Math.cos() 用法

    Math.sin(x)      x 的正玄值.返回值在 -1.0 到 1.0 之间: Math.cos(x)    x 的余弦值.返回的是 -1.0 到 1.0 之间的数: 这两个函数中的X 都是指 ...

  10. 小A项目为什么加班

    1.负责架构搭建的人搭建完成架构后,没有进行落地性验证:导致真正要用到的时候才发现spring没有配置:需要对架构人员的进度和内容进行跟踪,在跟踪进度的时候需要强调落地性: 2.负责架构搭建的人没有提 ...