题意:

给出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;
}

最新文章

  1. Windows 服务为宿主的WCF服务,详细图解。
  2. javase基础笔记3——this关键字和内存图
  3. 001 今天开始系统学习C#
  4. CentOS下 pycharm开发环境搭建之无穷无尽的问题
  5. WP8:在Cocos2d-x中使用OpenXLive
  6. 字符串匹配--Karp-Rabin算法
  7. form程序的界面修改
  8. 在Windows下利用php自带的mail函数发邮件
  9. iOS KVO &amp; KVC
  10. 201621123062《Java程序设计》第一周学习总结
  11. C++ 程序在运行时不显示dos界面
  12. EventBus学习笔记(一)
  13. Windows Service 学习系列(一):建立简单的Windows service
  14. Docker端口映射
  15. PHP优化——从语言到业务
  16. git 搭建本地仓库
  17. Object-C-Foundation-反射
  18. hdu 5129 (枚举) The E-pang Palace
  19. vue 请求后台数据 (copy)
  20. ElasticSearch(十):springboot集成ElasticSearch集群完成数据的增,删,改

热门文章

  1. unsigned double
  2. input光标位置
  3. 6.5.1.3 Caching SHA-2 Pluggable Authentication
  4. BZOJ 2069 POI2004 ZAW 堆优化Dijkstra
  5. checkbox 背景图片 纯CSS处理办法
  6. Hibernate总结(转)
  7. ORA-02298: 无法验证 (PNET.POST_CLOB_FK) - 未找到父项关键字
  8. Xmpp学习之Asmack取经-asmack入门(一)
  9. 网页中的title中设置图标
  10. Codeforces Round #376 (Div. 2) A. Night at the Museum —— 循环轴