How Many Answers Are Wrong HDU - 3038  点击打开链接
题意:现在有n个数(你并不知道这n个数是什么),m次查询,每次查询给出u,v,w。表示从第u个数到第v个数的和为w。
问,在这些查询中,有多少个是错误的(即有冲突)。
思路:从第u个数到第v个数的和其实可以理解为,第u-1个数到v个数之间的和。那么,就可以把和当成一种关系,利用带权并查集来维护这种关系。u-1节点为根,v的权值为第u-1个数到v个数之间的和。这里需要理解一下的是,在Find函数和unite(合并)函数里面,有两个关系域的转移方程(暂且这么叫他吧)
①p[x].relation+=p[tmp].relation
②p[root2].relation=p[x].relation+relation-p[y].relation
这两个方程需要自己带入一两个例子才能推得出来,所以不要怜惜你的纸和笔!!!一定要自己推一下

 1 #include<iostream>
 2 #include<cstring>
 3 #include<algorithm>
 4 #include<cstdio>
 5 using namespace std;
 6 const int Max=200005;
 7 typedef struct node//par表示父亲节点,relation表示关系,即权值
 8 {
 9     int par,relation;
10 }node;
11 node p[Max];
12 int n,m,ans;
13 void init()//初始化,父亲为自己,自己到自己的距离为0
14 {
15     ans=0;
16     for(int i=1;i<=n;i++){
17         p[i].par=i;
18         p[i].relation=0;
19     }
20 }
21 int Find(int x)//路径压缩
22 {
23     if(x==p[x].par)
24         return x;
25     int tmp=p[x].par;
26     p[x].par=Find(tmp);
27     p[x].relation+=p[tmp].relation;//关系域的转移方程一
28     return p[x].par;
29 }
30 void unite(int x,int y,int relation)
31 {
32     int root1=Find(x);
33     int root2=Find(y);
34     if(root1!=root2){//如果根不相同,那么,把root2连到root1上即合并操作
35         p[root2].par=root1;
36         p[root2].relation=p[x].relation+relation-p[y].relation;//关系域的转移方程二
37     }
38     else{//如果根相同,则不用合并,那么进行判断,看给出的区间的和是否有冲突,有的话ans++
39         if(p[y].relation-p[x].relation!=relation)
40             ans++;
41     }
42 }
43 int main()
44 {
45     while(~scanf("%d%d",&n,&m)){
46         int u,v,w;
47         init();
48         for(int i=0;i<m;i++){
49             scanf("%d%d%d",&u,&v,&w);
50             u-=1;//从第u个数到第v个数的和理解为,第u-1个数到v个数之间的和
51             unite(u,v,w);
52         }
53         printf("%d\n",ans);
54     }
55     return 0;
56 }

View Code

转载于:https://www.cnblogs.com/Levi-0514/p/9042485.html

How Many Answers Are Wrong HDU - 3038(带权并查集经典题,满满的都是注释)相关推荐

  1. HDU 3047 带权并查集

    点击打开链接 题意:给了n个人和m个关系,关系为a,b,x,意思是b的位置大于a的位置x,问条件依次下去的矛盾的条件的个数 思路:第一个带权的并查集,倒不是很难,它的算法思想非常给力,若两个不再同一集 ...

  2. [NOI2002] 银河英雄传说(带权并查集好题)

    题解: 用两个变量来维护: 1.sz[i]维护第i列元素的个数 2.pre[x]维护第x元素到当前队首的距离. 在并查集是不断维护这两个值. 至于如何维护看下图和文字解释 当然,这样维护还是不够的,对 ...

  3. 2017乌鲁木齐ICPC: I. A Possible Tree(带权并查集)

    I. A Possible Tree Alice knows that Bob has a secret tree (in terms of graph theory) with n nodes wi ...

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

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

  5. Valentine's Day Round hdu 5176 The Experience of Love [好题 带权并查集 unsigned long long]

    传送门 The Experience of Love Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/65536 K (Ja ...

  6. HDU 3047 Zjnu Stadium (带权并查集)

    链接: http://acm.hdu.edu.cn/showproblem.php?pid=3047 题目: Problem Description In 12th Zhejiang College ...

  7. HDU 5176 The Experience of Love 带权并查集

    The Experience of Love Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/O ...

  8. 带权并查集 HDU - 3047

    题意: 一圈座位有n个,给出m组序号之间的关系,比如,1 2 150 代表2号坐在1号位置序号+150,看m组数据有多少组冲突的. 思路: 带权并查集模板. #include<stdio.h&g ...

  9. 【POJ - 1703】Find them, Catch them(带权并查集之--种类并查集 权为与父节点关系)

    题干: Find them, Catch them Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 36176   Accep ...

最新文章

  1. Java多线程闲聊(四):阻塞队列与线程池原理
  2. Intger To Roman
  3. 查找一段文字中最长的重复字串 – 编程珠玑(排过序的后缀数组的应用)
  4. 实例工厂配置bean
  5. Mysql 数据库学习笔记02 编程
  6. OpenCV与AIPCV库——学习笔记(一)
  7. Windows下给Git配置SSH
  8. 【前端】相信你会用到的一篇笔记---CSS篇(1)
  9. Windows Server 2012 安装MySQL服务器感悟
  10. win32com excel转pdf
  11. fanuc系统屏蔽服务器,FANUC伺服轴的屏蔽方法
  12. 验证性因子分析(三)
  13. 大佬们用代码写的故事
  14. Ubuntu安装opencv的扩展模块-viz模块
  15. Quartus prime工程中各种文件的后缀及意义
  16. Crypto-Enigma密码机原理
  17. grub4dos引导Linux失败,Grub4dos引导Ubuntu
  18. The type 类名 is already defined
  19. 全网最全的qt连接mysql的应用,学生信息管理系统(展示全部代码)
  20. 2023年基建工程(设计规划施工)经验分享,超多干货

热门文章

  1. leetcode 110. 平衡二叉树
  2. 99.两个时钟不同步的设备怎么通信?
  3. 2021年中国科技的脚步依旧不停 我们将走得更广更深更远
  4. 要继续使用 App Engine 标准应用,您必须在 2021 年 1 月 31 日之前添加付款信息。
  5. 蒙面也能识别?俄罗斯开发新技术,伪装犯罪将在监控下无处遁行
  6. Facebook表示将不会默认开启人脸识别功能,被罚怕了?
  7. 计算机组成原理知识点概叙--计算机系统简介
  8. linux里的dd权限不够怎么办,Linux dd 遇到 容量不足 的 resize 解法
  9. 006_JSONObject对象公共方法
  10. 007_Curator框架二