HDU 3038

第一次接触带权并查集

//带权并查集 更新父节点的同时更新权值
#include<bits/stdc++.h>
using namespace std; const int N = 200020;
int pre[N];
int cnt[N];//cnt[i]代表i到自己祖先的权值 int Find(int x) {//路径压缩,更新父节点和权值
if (x != pre[x]) {
int fa = pre[x];
pre[x] = Find(pre[x]);
//当合并祖先时,x到新祖先的权值等于x到旧祖先的权值加旧祖先到新祖先的权值(此处的cnt[x]还没更新到结点所以还是到旧祖先的权值)
cnt[x] += cnt[fa];
}
return pre[x];
} int main() {
int n, m, x, y, w, s;
while (scanf("%d%d", &n, &m) != EOF) {
s = 0;
for (int i = 0; i <= n; i++) {
pre[i] = i;
cnt[i] = 0;
}
while (m--) {
scanf("%d%d%d", &x, &y, &w);
int fx = Find(x - 1);//因为[a, b]中包含a,所以实际上是对(a, b]操作,即x = x-1
int fy = Find(y);
//cout << "fx = " << fx << " fy = " << fy << endl;
if (fx == fy) {//如果发现该区间的权值和之前得出的权值不等,s++
if (cnt[x - 1] + w != cnt[y])
s++;
}
/*
在合并操作中,对我们需要更新cnt[fb](由于fy成为fa的子节点),公式:cnt[fy] = cnt[x - 1] - cnt[y] + w
- 更新cnt[fy]的目的是维护子树(fy)相对于父亲树(fx)之间的权值差。
- cnt[y]保存结点y到结点fy之间的权值; cnt[x-1]保存结点x-1到结点fx之间的权值;w是结点x-1到结点y之间的权值
- 所以cnt[fy]的值=从结点fa到结点x-1的权值(+cnt[x - 1]),加上从结点x到结点y的权值(+w),最后减去结点fy到结点y的权值(-cnt[y])
*/
else {
pre[fy] = fx;
//cout << "pre[fy] = " << pre[fy] << endl;
cnt[fy] = cnt[x - 1] + w - cnt[y];
//cout << "cnt[fy] = " << cnt[fy] << endl;
}
}
printf("%d\n", s);
}
return 0;
}

#3038:How Many Answers Are Wrong (带权并查集)的更多相关文章

  1. hdu 3038 How Many Answers Are Wrong ( 带 权 并 查 集 )

    How Many Answers Are Wrong Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Ja ...

  2. HDU 3038 How Many Answers Are Wrong(带权并查集)

    太坑人了啊,读入数据a,b,s的时候,我刚开始s用的%lld,给我WA. 实在找不到错误啊,后来不知怎么地突然有个想法,改成%I64d,竟然AC了 思路:我建立一个sum数组,设i的父亲为fa,sum ...

  3. HDU3038 How Many Answers Are Wrong —— 带权并查集

    题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=3038 How Many Answers Are Wrong Time Limit: 200 ...

  4. hdu3038How Many Answers Are Wrong(带权并查集)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3038 题解转载自:https://www.cnblogs.com/liyinggang/p/53270 ...

  5. HDU3038 How Many Answers Are Wrong[带权并查集]

    How Many Answers Are Wrong Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Ja ...

  6. 【HDU3038】How Many Answers Are Wrong - 带权并查集

    描述 TT and FF are ... friends. Uh... very very good friends -________-b FF is a bad boy, he is always ...

  7. How Many Answers Are Wrong(带权并查集)

    How Many Answers Are Wrong http://acm.hdu.edu.cn/showproblem.php?pid=3038 Time Limit: 2000/1000 MS ( ...

  8. HDU3038:How Many Answers Are Wrong(带权并查集)

    How Many Answers Are Wrong Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Ja ...

  9. 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 ...

  10. HDU - 3038 How Many Answers Are Wrong (带权并查集)

    题意:n个数,m次询问,每次问区间a到b之间的和为s,问有几次冲突 思路:带权并查集的应用.[a, b]和为s,所以a-1与b就能够确定一次关系.通过计算与根的距离能够推断出询问的正确性 #inclu ...

随机推荐

  1. 基于TensorFlow 2与PaddlePaddle 2预测泰坦尼克号旅客生存概率的比较

    ​  目录 1,程序比较 2,训练过程对比: 3,训练结果对比 AI框架经过大浪淘沙之后,目前真正能够完整用于生产.科研.学术的只剩下了谷歌.脸书.百度三家的框架,本文通过一个泰坦尼克号旅客生存概率预 ...

  2. 小心C#中的只读结构体成员

    示例 我们先来看一段结构体的代码 (基于 VS2022 + .NET 8.0) public struct MyStruct(int number) { public int Number = num ...

  3. Hnswlib 介绍与入门使用

    Hnswlib是一个强大的近邻搜索(ANN)库, 官方介绍 Header-only C++ HNSW implementation with python bindings, insertions a ...

  4. Redis 学习笔记1:数据类型

    Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及 zset(sorted set:有序集合). 一.Redis 数据类型-STRING 1.常用 ...

  5. 神经网络优化篇:机器学习基础(Basic Recipe for Machine Learning)

    机器学习基础 下图就是在训练神经网络用到的基本方法:(尝试这些方法,可能有用,可能没用) 这是在训练神经网络时用到地基本方法,初始模型训练完成后,首先要知道算法的偏差高不高,如果偏差较高,试着评估训练 ...

  6. 如何对连续型数据进行离散化处理,并进行OneHot编码?

    如何对连续型数据进行离散化处理,并进行OneHot编码,最终将OneHot编码作为特征因子输入模型? 什么是OneHot编码 One-Hot编码是分类变量作为二进制向量的表示.这首先要求将分类值映射到 ...

  7. 华企盾DSC造成svn、git连接不上常见处理方法

    1.检查svn服务器是否正在运行 2.检查个人模式连接不上服务器网络加密了客户端未加密(查看客户端日志进程是否为legal:1网络访问设置是否正常,试试只加密服务器IP及端口的方式),个人模式可以连接 ...

  8. python 获取apk 信息

    python 获取apk 信息 1.安装androguard pip install androguard 2.获取apk的相关信息 引入基础信息 from androguard.misc impor ...

  9. java框架Mybatis的第一个程序

    1:什么是MyBatis MyBatis 是一款优秀的持久层框架 MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集的过程 MyBatis 可以使用简单的 XML 或注解来配 ...

  10. Luogu P1298 最接近的分数 做题记录

    算是水紫,不过也学到一些有用的东西. 题意 给定正小数 \(N\).求分子不大于 \(n\),分母不大于 \(m\) 的分数 \(\dfrac{n}{m}\),使得 \(\dfrac{n}{m}\) ...