题目大意:有一个区间,长度为n,然后跟着m个子区间,每个字区间的格式为x,y,z表示[x,y]的和为z。如果当前区间和与前面的区间和发生冲突,当前区间和会被判错,问:有多少个区间和会被判错。

题解:x,y,z表示从x开始到y的所有数字的和,那么x-1就表示从(x-1,y]的区间和。我们可以对区间的左边x-1寻找他的左端点,同时对区间右边y也寻找他的左端点,如果这两个左端点相等(设为l)那么他就是将区间了[l,y]拆分成了[l,x-1]和[x,y],我们判断一下区间和是不是相等的就可以了也就是w[y]==w[x-1]+realtion。

如果左端点不相等的话,我们就进行合并。

(A和B分别为x和y的根节点)

合并后:

然后再修改权值, 规定B为A的父节点,也就是说现在这棵树B是根节点了,x到B的路径应该有两种,一种是x->A->B,权值之和为w[x]+AB,另外一种是x->y->b权值之和为relation+w[y]

二者应该相等,所以w[x]+AB=relation+w[y],所以AB=w[A]=w[y]-w[x]+relation。

code:

  

#include<bits/stdc++.h>
using namespace std;
const int N=2e5+;
int fa[N];
int w[N];
int find(int x){
if(x==fa[x]) return x;
else {
int c=find(fa[x]);
w[x]+=w[fa[x]];
return fa[x]=c;
}
}
bool unite(int x,int y,int relation){
int fx=find(x),fy=find(y);
if(fx!=fy){
fa[fy]=fx;
w[fy]=w[x]-w[y]+relation;
return ;
}
else {
return relation!=w[y]-w[x];
}
}
int main(){
int n,m;
ios::sync_with_stdio();
while(cin>>n>>m){
for(int i=;i<=n;i++) {
fa[i]=i;
w[i]=;
}
int ans=;
for(int i=;i<=m;i++){
int x,y,z;
cin>>x>>y>>z;
x--;
if(unite(x,y,z)) ans++;
}
cout<<ans<<endl;
}
return ;
}

最新文章

  1. PHP对图片按照一定比例缩放并生成图片文件
  2. 【VBA】批量插入图片
  3. jQuery中.bind() .live() .delegate() .on()的区别
  4. zoj3888 找第二大
  5. Python中编码问题?
  6. poj3254Corn Fields(状压)
  7. 利用dokan作虚拟磁盘开发
  8. RAS 加密 解密
  9. js中可转bool为false的值
  10. 3018: [Usaco2012 Nov]Distant Pastures
  11. _1_html_
  12. Linux入门_1
  13. 【ShaderToy】跳动的心❤️
  14. 分享我编写的powershell脚本:ssh-copy-id.ps1
  15. RPM 包的构建 - SPEC 基础知识
  16. Qt+QGIS二次开发:自定义类实现查询矢量数据的属性字段值(图查属性)
  17. win 7 64 mysql 5.6.4 安装
  18. Vue 的开始
  19. 51nod1563
  20. day 93 Django学习之django自带的contentType表

热门文章

  1. (原)Non-local Neural Networks
  2. Mysql失败,异常pymysql.err.InternalError: (1366, &quot;Incorrect string value: &#39;\\xF0\\x9D\\x90\\xBF;......
  3. Django 视图笔记
  4. ubuntu 下python出现pkg: error processing package *python* 解决之道
  5. 用Python简单批量处理数据
  6. js Object方法小结
  7. flask前后端输出html页面(数组遍历)
  8. [codeforces]Page Numbers &lt;模拟&gt;
  9. [codevs2597]团伙&lt;并查集&gt;
  10. 1272: 【基础】求P进制数的最大公因子与最小公倍数