题目大意:TT 和 FF玩游戏(名字就值五毛),有一个数列,数列有N个元素,现在给出一系列个区间和该区间内各个元素的和,如果后出现的一行数据和前面一出现的数据有矛盾,则记录下来。求有矛盾数据的数量。

题目思路:刚刚拿到手时一脸懵逼,这是并查集?后来发现还真是并查集 - -!!

如果数据有错那么会是什么情况?

1-10 10

1-5   5

6-10  4

很明显第三行的数据和已知的数据产生了矛盾,我们分析一下矛盾是如何产生的。

我们用v[i]来统计最右端为i的区间和,那么:

第一行数据得知v[10]=10;

第二行数据得知v[5]=5;

第三行数据在与第二行数据合并时发现 V[10]=9.

这样矛盾便产生了。

由于存在集合划分的问题,所以我们理应想到并查集去解决问题。具体问题看代码吧,代码我觉得解释的比较详细了

#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<vector>
#include<queue>
#define INF 0x3f3f3f3f
#define MAX 1000005 using namespace std; int father[MAX],v[MAX],n,m; int Find(int x)
{
if(father[x]==-)
return x;
int k=Find(father[x]); v[x]+=v[father[x]];//对v[x]进行更新 return father[x]=k;
} int main()
{
int i,j,a,b,c; while(scanf("%d%d",&n,&m)!=EOF)
{
int ans=;
for(i=;i<MAX;i++)
{
father[i]=-;
v[i]=;
} for(i=;i<=m;i++)
{
scanf("%d%d%d",&a,&b,&c); a--;//为什么要减一?你知道了区间1-5,和6-10的和,如果你不把6减1,你如何经行下面的更新呢? int x=Find(a);
int y=Find(b); if(x!=y)//如果发现两个根节点不相同,则经行更新
{
father[y]=x; v[y]=v[a]-v[b]+c;//由式子:v[y]=v[a]-(v[b]-c),化简而得,自己可以画个图推一下,并不难。
} else//如果根节点相同了,我们就可以经行判断了
{
if(v[b]-v[a] !=c)//v[b]-v[a]根据之前的条件得到的区间a-b的和,如果这个值并不等于C证明与前面矛盾。
ans++;
}
}
printf("%d\n",ans);
}
return ;
}

HDU 3038 How Many Answers Are Wrong 很有意思的一道并查集问题的更多相关文章

  1. HDU 3038 How Many Answers Are Wrong 【YY && 带权并查集】

    任意门:http://acm.hdu.edu.cn/showproblem.php?pid=3038 How Many Answers Are Wrong Time Limit: 2000/1000 ...

  2. HDU 3038 - How Many Answers Are Wrong - [经典带权并查集]

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3038 Time Limit: 2000/1000 MS (Java/Others) Memory Li ...

  3. hdu 3038 How Many Answers Are Wrong

    http://acm.hdu.edu.cn/showproblem.php?pid=3038 How Many Answers Are Wrong Time Limit: 2000/1000 MS ( ...

  4. HDU 3038 How Many Answers Are Wrong (并查集)

    How Many Answers Are Wrong Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Ja ...

  5. HDU 3038 How Many Answers Are Wrong (并查集)---并查集看不出来系列-1

    Problem Description TT and FF are ... friends. Uh... very very good friends -________-bFF is a bad b ...

  6. hdu 3038 How Many Answers Are Wrong(并查集)

    题意: N和M.有N个数. M个回答:ai, bi, si.代表:sum(ai...bi)=si.如果这个回答和之前的冲突,则这个回答是假的. 问:M个回答中有几个是错误的. 思路: 如果知道sum( ...

  7. 【HDU 3810】 Magina (01背包,优先队列优化,并查集)

    Magina Problem Description Magina, also known as Anti-Mage, is a very cool hero in DotA (Defense of ...

  8. HDU 1116 || POJ 1386 || ZOJ 2016 Play on Words (欧拉回路+并查集)

    题目链接 题意 : 有很多门,每个门上有很多磁盘,每个盘上一个单词,必须重新排列磁盘使得每个单词的第一个字母与前一个单词的最后一个字母相同.给你一组单词问能不能排成上述形式. 思路 :把每个单词看成有 ...

  9. hdu 4641 K-string SAM的O(n^2)算法 以及 SAM+并查集优化

    链接:http://acm.hdu.edu.cn/showproblem.php?pid=4641 题意:有一个长度为n(n < 5e4)的字符串,Q(Q<=2e5)次操作:操作分为:在末 ...

随机推荐

  1. mongodb 数据库导入.cvs文件时某些字段类型变成NumberLong的解决办法

    在mongodb中导入数据时,会在数据库中生成字段记录为NumberLong的数据,可以使用以下方式将其转换为String db.Account.find().forEach( function(it ...

  2. CSS3秘笈:第十一章

    表格和表单的格式化 1.表格的各种标签提供了许多有用的“钩子”,可以再上面挂CSS样式.如果创建了<th>标签样式,那么每一个列的标题——<th>标签——看起来就有可能与其他的 ...

  3. hdu_3565_Bi-peak Number(数位DP)

    题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=3565 题意:给你一个区间,让你找这个区间内有两个山峰的数的最大和,什么是两个山峰,比如121121   ...

  4. http response

    关键词:http response header 下载文件 案例1: 访问某个链接,然后下载文件,需要特定的http头: header("Content-Type:application/z ...

  5. Eclipse/MyEclipse中使用复制粘贴功能卡的解决办法

    最近在MyEclipse中编辑代码时,使用快捷键进行复制粘贴,经常会导致编辑器短暂的停顿,光标不跟随,居然反应不过来,几近假死. 想来想去应该是编辑上的什么配置或者是IDE的什么功能导致,于是进入Pr ...

  6. oracle即时客户端安装方法

    http://blog.csdn.net/magicboylinw/article/details/7025885 Oracle Instant Client(即时客户端) 安装与配置 oracleO ...

  7. jni中的参数含义

    #include <jni.h> JNIEXPORT jstring JNICALL Java_com_example_hellojni_MainActivity_helloFromC ( ...

  8. BMP文件格式详解

    BMP文件格式详解(BMP file format) BMP文件格式,又称为Bitmap(位图)或是DIB(Device-Independent Device,设备无关位图),是Windows系统中广 ...

  9. Qt之中文显示(QMessageBox、QLineEdit右键菜单等)

    来源:http://blog.sina.com.cn/s/blog_a6fb6cc90101art3.html 在编写Qt程序的时候,总会碰到中文问题,一直都很困惑,原本在使用QLineEdit的时候 ...

  10. Shell script fails: Syntax error: “(” unexpected

    Shell script fails: Syntax error: “(” unexpected google 一下. http://unix.stackexchange.com/questions/ ...