How Many Answers Are Wrong HDU - 3038 (经典带权并查集)
题目大意:有一个区间,长度为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 ;
}
How Many Answers Are Wrong HDU - 3038 (经典带权并查集)的更多相关文章
- D - How Many Answers Are Wrong HDU - 3038【带权并查集】
How Many Answers Are Wrong Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Ja ...
- 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 ...
- POJ 1984 Navigation Nightmare 【经典带权并查集】
任意门:http://poj.org/problem?id=1984 Navigation Nightmare Time Limit: 2000MS Memory Limit: 30000K To ...
- HDU 3047 带权并查集 入门题
Zjnu Stadium 题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=3047 Problem Description In 12th Zhejian ...
- POJ 1182 食物链 (经典带权并查集)
第三次复习了,最经典的并查集 题意:动物王国中有三类动物A,B,C,这三类动物的食物链构成了有趣的环形.A吃B, B吃C,C吃A. 现有N个动物,以1-N编号.每个动物都是A,B,C中的一种,但是我们 ...
- poj1182食物链,经典带权并查集
动物王国中有三类动物A,B,C,这三类动物的食物链构成了有趣的环形.A吃B, B吃C,C吃A. 现有N个动物,以1-N编号.每个动物都是A,B,C中的一种,但是我们并不知道它到底是哪一种. 有人用两种 ...
- POJ 1182 食物链(经典带权并查集 向量思维模式 很重要)
传送门: http://poj.org/problem?id=1182 食物链 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: ...
- POJ-1182(经典带权并查集)
食物链 POJ-1182 一个很好的分析博客:https://blog.csdn.net/niushuai666/article/details/6981689 三种关系:两者同类,吃父节点,被父节点 ...
- HDU3038 How Many Answers Are Wrong —— 带权并查集
题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=3038 How Many Answers Are Wrong Time Limit: 200 ...
随机推荐
- 图论-BFS-最小高度的树 Minimum Height Trees
2018-09-24 12:01:38 问题描述: 对于一个具有树特征的无向图,我们可选择任何一个节点作为根.图因此可以成为树,在所有可能的树中,具有最小高度的树被称为最小高度树.给出这样的一个图,写 ...
- iOS 应用签名
一.密码学简介 1.1 base64 Base64 是一种通过查表的编码方法,不能用于加密,即使使用自定义的编码表也不行. Base64 适用于小段内容的编码,比如数字证书签名.Cookie 的内容等 ...
- 17.用cmd创建maven web工程
1.跳转到需要创建maven工程的目录,输入 mvn archetype:generate 2.找到webapp的那一项,输入它的序号(这里是10) 3.输入groupId,artifactId,ve ...
- Docker容器入门-基本命令的使用
目前容器技术使用相当广泛 不会或者没有使用过容器感觉都不像是个搞技术的 所以,我也就docker相关内容做一个整理 只有不断的学习,才能保持自己的竞争力 什么是容器? 容器是一种轻量级.可移植.自包含 ...
- JS烟花案例优化版
不明白为什么是烟花优化版本的先参考作者的烟花基础版本 烟花优化版本主要实在优化爆炸的范围和运动上做了优化,爆炸范围我们采用已圆的爆炸方式,以鼠标点击的位置为圆形爆炸的烟花效果 <!DOCTYPE ...
- JS函数详解
什么是函数呢? 对于JS来说,我们可以把函数理解为任意一段代码放在一个盒子里,在我们想要让这段代码执行的时候,直接执行这个盒子里的代码就行.专业一点来讲:js函数就是由事件驱动的可执行课重复只用的代码 ...
- Redis对象——哈希(Hash)
哈希在很多编程语言中都有着很广泛的应用,而在Redis中也是如此,在redis中,哈希类型是指Redis键值对中的值本身又是一个键值对结构,形如value=[{field1,value1},...{f ...
- Ubuntu16.04下LAMP环境的安装与配置
Ubuntu16.04下LAMP环境的安装与配置 最近做个实验需要用到Ubuntu环境的靶场,所以这里介绍下Ubuntu环境下LAMP的安装与配置,话不多说,我们gkd! 1.Apache2的安装 首 ...
- ovirt 替换自主签署证书
需求我自己写了一个python后台,添加上了ovirt 引擎web上,如图 但第一次访问时需要,需要接受两次不安全连接,ovirt web使用https,我往里面加http,加不进去. 只能同样使用 ...
- Hadoop入门之hdfs
大数据技术开篇之Hadoop入门[hdfs] 学习都是从了解到熟悉的过程,而学习一项新的技术的时候都是从这个技术是什么?可以干什么?怎么用?如何优化?这几点开始.今天这篇文章分为两个部分.一. ...