HDU 3038 How many answer are wrong (并查集)
来源:互联网 发布:孙子兵法华杉 知乎 编辑:程序博客网 时间:2024/06/08 00:51
题目意思大概是这样的 给你一个n和m分别代表在1-n这些区间内给你m组数字 每组有三个值 分表代表从 L 到 R 的和为value 问你互相矛盾的组合有多少个、
并查集经典问题 刚开始不理解这道题的解法是什么意思 怎么都看不懂 就背下来了 过了好久才看懂是什么意思
思路是这样的 我们维护两个数组 一个是并查集的fa数组不用多说 另一个是sum数组 这歌数组sum[i] 是用来记录 I 到根节点的距离 我们在发现两个点的根节点不同并合并 这时候sum数组中的值并未更新 而是下一次用到他们的find函数的时候才更新了他们的值
#include <iostream>#include <cstring>#include <algorithm>using namespace std;const int maxn = 200005;int fa[maxn];int sum[maxn];int find(int x){if(x == fa[x])return fa[x];int temp = find(fa[x]);sum[x] += sum[fa[x]];return fa[x] = temp;} int main(){int n, m;while (cin >> n >> m) {int ans = 0;for (int i = 0; i <= n; i ++) fa[i] = i;memset(sum , 0, sizeof(sum));int a, b, value;for (int i = 0; i < m; i ++) {cin >> a >> b >> value;a--;int xx = find(a);int yy = find(b);if(xx != yy) {fa[yy] = xx;//把yy的父亲变成xxsum[yy] = sum[a] - sum[b] + value;//sum[yy]代表yy到xx的距离 这句话可能需要好好理解下}else { if(sum[b] - sum[a] != value)ans ++;}}cout << ans << endl;}}
阅读全文
0 0
- HDU 3038 How many answer are wrong (并查集)
- HDU 3038 How Many Answers Are Wrong(并查集)
- HDU 3038 How Many Answers Are Wrong - 并查集
- hdu 3038 - How Many Answers Are Wrong(并查集)
- hdu 3038 How Many Answers Are Wrong(并查集)
- 并查集 How Many Answers Are Wrong HDU 3038
- [HDU 3038]How Many Answers Are Wrong[并查集]
- hdu-3038-How Many Answers Are Wrong(并查集)
- 并查集-HDU-3038-How Many Answers Are Wrong
- HDU 3038 How Many Answers Are Wrong(并查集)
- 【HDU 3038 How Many Answers Are Wrong】+ 并查集
- HDU-3038 How Many Answers Are Wrong 并查集
- HDU 3038 How Many Answers Are Wrong (并查集)(需复习!)
- HDU 3038 how many answers are wrong(带权并查集)
- HDU 3038 How Many Answers Are Wrong (带权并查集+区间判断)
- hdu 3038 How Many Answers Are Wrong(并查集)
- HDU - 3038 How Many Answers Are Wrong (带权并查集)
- HDU 3038 How Many Answers Are Wrong(带权并查集)
- maven入门
- python 正则表达式学习
- Mysql 拿指定经纬度与数据库多条经纬度进行距离计算(有偏差)
- Java普通代码块,构造代码块,静态代码块区别,执行顺序的代码实例
- java基础知识之(==与equals,try catch finally return ,装箱与拆箱)
- HDU 3038 How many answer are wrong (并查集)
- 最全的mysql 5.7.13 安装配置方法图文教程(linux)
- 重载赋值运算符(c++)
- synchronized的JVM底层实现
- R中ifelse、which、%in%的用法
- 使用双缓冲技术解决动画播放闪烁问题
- C++学习笔记之编程应当注意的问题
- Python操作Mysql数据库
- 每日一题——链表相交问题