题意:

给出m组区间[a,b],以及其区间的和,问有矛盾的有几组;

思路:

种类并查集。

主要是几个关系:同类元素的关系,父亲与儿子的关系,不同类元素的关系;

我们可以类似看作一个前缀和,sum[x]是x到根这段路径上的和,那么根一定是坐标越小的,那么如果说对于同类(同一个集合)的判断就是sum[b]-sum[a-1]是否等于给出值

如果是不同类的话:组合,大的值归到小的去。

考虑区间[x,y],xx是x的根,yy是y的根

第一种:yy>xx

xx sum[xx]



yy sum[yy]

        

x sum[x]

        val

y sum[y]



pre[yy]=xx;

sum[yy] = sum[x] + val - sum[y];



第二种:xx>yy

yy sum[yy]



xx sum[xx]

    

x sum[x]

    val

y sum[y]



pre[xx]=yy;

sum[xx] = sum[y] - sum[x] - val;

在状态压缩的时候,就是一个前缀和嘛,直接把之前的加过来就好了。

#include<bits/stdc++.h>
using namespace std; const int N=2e5+10; int sum[N],pre[N],ans,n,m; int Find(int x)
{
if(pre[x]==x)
return x;
int temp=pre[x];
pre[x]=Find(temp);
sum[x]+=sum[temp];
return pre[x];
} void Merge(int x,int y,int val)
{
int xx=Find(x);
int yy=Find(y);
if(xx>yy)
{
pre[xx]=yy;
sum[xx]=sum[y]-sum[x]-val;
}
else if(xx<yy)
{
pre[yy]=xx;
sum[yy]=sum[x]+val-sum[y];
}
else{
if(sum[y]-sum[x]!=val)
ans++;
}
} int main()
{
while(~scanf("%d%d",&n,&m))
{
for(int i=0;i<=n;i++)
{
sum[i]=0;
pre[i]=i;
}
ans=0;
while(m--)
{
int x,y,val;
scanf("%d%d%d",&x,&y,&val);
Merge(x-1,y,val);
}
printf("%d\n",ans);
}
return 0;
}

HDU3038【种类并查集】的更多相关文章

  1. hdu3038(种类并查集,推荐)

    题目大意:有n次询问,给出a到b区间的总和,问这n次给出的总和中有几次是和前面已近给出的是矛盾的?? 很有意思的一道题目,要是没有做过种类并查集,我肯定会以为这种题目是线段树题目...... 思路:我 ...

  2. NOI2001|POJ1182食物链[种类并查集 向量]

    食物链 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 65430   Accepted: 19283 Description ...

  3. NOIP2010关押罪犯[并查集|二分答案+二分图染色 | 种类并查集]

    题目描述 S 城现有两座监狱,一共关押着N 名罪犯,编号分别为1~N.他们之间的关系自然也极不和谐.很多罪犯之间甚至积怨已久,如果客观条件具备则随时可能爆发冲突.我们用“怨气值”(一个正整数值)来表示 ...

  4. POJ1703Find them, Catch them[种类并查集]

    Find them, Catch them Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 42416   Accepted: ...

  5. poj1417(种类并查集+dp)

    题目:http://poj.org/problem?id=1417 题意:输入三个数m, p, q 分别表示接下来的输入行数,天使数目,恶魔数目: 接下来m行输入形如x, y, ch,ch为yes表示 ...

  6. poj1733(种类并查集+离散化)

    题目链接: http://poj.org/problem?id=1733 题意: 输入n表示有一个长度为n的0,1字符串, m表示接下来有m行输入, 接下来的m行输入中x, y, even表示第x到第 ...

  7. poj 1182:食物链(种类并查集,食物链问题)

    食物链 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 44168   Accepted: 12878 Description ...

  8. pku 1703(种类并查集)

    题目链接:http://poj.org/problem?id=1703 思路;个人觉得本质上还是和带权并查集一样的,只不过多了一个MOD操作,然后就是向量关系图稍微改动一下就变成种类并查集了,对于本题 ...

  9. hdu 3038 How Many Answers Are Wrong(种类并查集)2009 Multi-University Training Contest 13

    了解了种类并查集,同时还知道了一个小技巧,这道题就比较容易了. 其实这是我碰到的第一道种类并查集,实在不会,只好看着别人的代码写.最后半懂不懂的写完了.然后又和别人的代码进行比较,还是不懂,但还是交了 ...

随机推荐

  1. 第 2 章 第 9 题 顺序 & 二分搜索效率分析问题

    问题分析 顺序搜索的时间复杂度是O( n ),二分搜索的时间复杂度级别是O( lgn ).但这并不代表二分的时间开销就一定比顺序的小,因为二分搜索有个前提:元素必须要是有序的.如果仅仅为了二分搜索几个 ...

  2. java中 hashCode() 和 equals()

    1. 值类型是存储在内存中的栈,而引用类型的变量在栈中仅仅是存储引用类型变量的地址来自堆,而其本身则存储在栈中. 2. ==操作比较的是两个变量的值是否相等, 3. 对于引用型变量表示的是两个变量在堆 ...

  3. WPF中的数据绑定Data Binding使用小结

    完整的数据绑定的语法说明可以在这里查看: http://www.nbdtech.com/Free/WpfBinding.pdf MSDN资料: Data Binding: Part 1 http:// ...

  4. Leetcode 002-Search Insert Position

    #Given a sorted array and a target value, return the index if the target is found. If not, return th ...

  5. ETF到底是什么?

    ETF(交易所交易基金)是一种证券产品,它可以跟踪一些相关的资产,不论是股票.债券.商品,还是数字货币. ETF基金会负责跟踪指定的资产.然后放出部分股份,这些股份代表着对资产的拥有权. 交易ETF股 ...

  6. Tomcat之catalina.out日志分割

    可参考:http://meiling.blog.51cto.com/6220221/1911769 本人尚未验证.

  7. [haoi2014]穿越封锁线

    这题需要注意的一点是射线法需要考虑边界,而且题目对边界的限制极为严格. dcmp(v[i%n].x-x)<=0&&dcmp(v[(i+1)%n].x-x)>0 dcmp(v ...

  8. 异常描述:hibernate懒加载中,用OpenSessionInViewFilter解决之后,同时对一个collection创建两个session访问导致异常(Illegal attempt to associate a collection with two open sessions)

    在保存的时候如果使用以下方法就会报错 解决:使用merge()方法就可以解决异常... merge()方法的解释: 传入的参数在数据库中不存在的时候会添加一条数据,根据主键判断已存在的时候会更新这条数 ...

  9. 《数学之美》第15章 矩阵计算和文本处理中两个分类问题——SVD分解的应用

    转载请注明原地址:http://www.cnblogs.com/connorzx/p/4170047.html 提出原因 基于余弦定理对文本和词汇的处理需要迭代的次数太多(具体见14章笔记),为了找到 ...

  10. linux应用之perl环境的安装(centos)

    1.安装Perl环境 yum install perl*这个命令基本上把perl的模块给安装齐了.yum install cpanCPAN这个就不用说了吧,大家都懂. 如果你对perl模块版本要求比较 ...