1701. Ostap and Partners(并查集-关系)
1701
又是类似食物链的这一类题
这题是找与根节点的和差关系 因为0节点是已知的 为0 那么所有的都可以转换为与0的和差关系
可以规定合并的两节点 由大的指向小的 然后再更新和差关系
有可能最后有的不在0集合中 这时要确定最大初值 当然根据集合中出现的负值来确定 题目中工资不能出现负值 也不可大于10^9 在处理完关系后 再判断一下这两个条件 不满足的话就输出m
1 #include <iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 #include<cstring> 6 #include<cstdlib> 7 using namespace std; 8 #define N 50010 9 #define LL long long 10 #define maxz 1000000000 11 int n,m; 12 int f[N]; 13 LL r[N],mm[N]; 14 int find(int x) 15 { 16 if(x!=f[x]) 17 { 18 int o = f[x]; 19 f[x] = find(f[x]); 20 r[x] += r[o]; 21 } 22 return f[x]; 23 } 24 int main() 25 { 26 int i,a,b,c; 27 int flag = 0,tx = maxz; 28 scanf("%d%d",&n,&m); 29 for(i = 0 ; i < n ; i++) 30 { 31 f[i] = i; 32 r[i] = 0; 33 } 34 for(i = 1 ;i <= m ; i++) 35 { 36 scanf("%d%d%d",&a,&b,&c); 37 if(flag) 38 continue; 39 int x = find(a),y = find(b); 40 if(x!=y) 41 { 42 if(x<y) 43 { 44 swap(x,y); 45 swap(a,b); 46 c = -c; 47 } 48 f[x] = y; 49 r[x] = -r[a]+r[b]+c; 50 } 51 else 52 { 53 if(r[a]-r[b]!=c) 54 { 55 flag = 1; 56 tx = i; 57 58 } 59 } 60 } 61 for(i = 1; i < n ; i++) 62 { 63 int ho = find(i); 64 if(ho!=0) 65 { 66 if(r[i]<0) 67 { 68 mm[ho] = max(mm[ho],-r[i]); 69 } 70 } 71 } 72 for(i = 1 ; i < n ; i++) 73 { 74 int ff = find(i); 75 if((r[i]+mm[ff])>maxz||(r[i]+mm[ff])<0) 76 { 77 flag = 1; 78 tx = m; 79 break; 80 } 81 } 82 if(flag) 83 { 84 printf("Impossible after %d statements\n",tx); 85 return 0; 86 } 87 puts("Possible"); 88 printf("0\n"); 89 for(i = 1; i < n ; i++) 90 { 91 int ff = find(i); 92 printf("%lld\n",r[i]+mm[ff]); 93 } 94 return 0; 95 }
View Code
转载于:https://www.cnblogs.com/shangyu/p/3348629.html
1701. Ostap and Partners(并查集-关系)相关推荐
- C++ (PTA) 红色警报 并查集
题目: 战争中保持各个城市间的连通性非常重要.本题要求你编写一个报警程序,当失去一个城市导致国家被分裂为多个无法连通的区域时,就发出红色警报.注意:若该国本来就不完全连通,是分裂的k个区域,而失去一个 ...
- 【POJ - 1703】Find them, Catch them(带权并查集之--种类并查集 权为与父节点关系)
题干: Find them, Catch them Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 36176 Accep ...
- 亲戚关系关系算法java程序_C++并查集亲戚(Relations)算法实例
本文实例讲述了C++并查集亲戚(Relations)算法.分享给大家供大家参考.具体分析如下: 题目: 亲戚(Relations) 或许你并不知道,你的某个朋友是你的亲戚.他可能是你的曾祖父的外公的女 ...
- 并查集应用-判断亲戚关系
题目背景 若某个家族人员过于庞大,要判断两个是否是亲戚,确实还很不容易,现在给出某个亲戚关系图,求任意给出的两个人是否具有亲戚关系. 题目描述 规定:x和y是亲戚,y和z是亲戚,那么x和z也是亲戚.如 ...
- 亲戚关系(并查集(YYOJ
题目描述 若某个家族人员过于庞大,要判断两个是否是亲戚,确实还很不容易,现在给出某个亲戚关系图,求任意给出的两个人是否具有亲戚关系. 规定:x和y是亲戚,y和z是亲戚,那么x和z也是亲戚.如果x,y是 ...
- 【NOJ1593、1594、1595】【并查集三连】朋友敌人关系
1593.并查集(一) 时限:1000ms 内存限制:10000K 总时限:3000ms 描述 一个城市中有n个人,其中一些人是朋友关系,同时他们都认为:朋友的朋友是朋友,现在任给两个人,问他们是否 ...
- 并查集c++代码_[Leetcode 每日精选](本周主题-并查集) 547. 朋友圈
题目难度: 中等 原题链接 今天继续来做并查集的问题, 这道题仍然比较基础, 而且也是个比较接近现实的问题了. 大家在我的公众号"每日精选算法题"中的聊天框中回复 并查集 就能看到 ...
- HDU1811 Rank of Tetris 拓扑排序+并查集 OR 差分约束最短路+并查集
题目链接 题意:就是给你一堆关系,看能不能排出个确定的顺序 做法: 1. 拓扑排序+并查集 应该很容易想到的一种思路,大于小于建立单向边.对于相等的呢,就把他们缩成一个点.就用并查集缩成一个点就行了 ...
- 关于 并查集(union find) 算法基本原理 以及 其 在分布式图场景的应用
二月的最后一篇水文-想写一些有意思的东西. 文章目录 环检测在图数据结构中的应用 深度/广度优先 检测环 并查集数据结构 (Union-Find) 基本概念 初始化 合并 union 查找祖先 优化1 ...
最新文章
- Caffe中对MNIST执行train操作执行流程解析
- c++找不到标识符_沪C转沪牌流程攻略大全
- opencv-python将.tif格式的图像转为png格式
- Spring Bean引用例子
- mysql秒级平滑_DDM实践:数据库秒级平滑扩容方案
- Pygame 整活五子棋
- JavaScript日期格式化处理
- JavaScript算法(实例七)空瓶子换汽水问题
- 常见Linux版本概览
- 联想笔记本linux无线网卡驱动下载,联想无线网卡驱动下载-联想 X1 Carbon网卡驱动下载v18.40.0 官方最新版-西西软件下载...
- windows下查看文件md5值
- [ 服务器 ] ___ Linux : Tftpd
- 实朴检测深交所上市:市值44亿 应收账款逾期6587万
- 高斯消去法解线性方程组C++实现
- 降本增效的革命性工具: Share Creators 数字资产管理利器
- 北京金普蝶:让客户满意就是最好的营销!
- Wireshark软件使用
- 全志T7/T507 Qt5.12.5移植记录
- php 聊天室 教程,基于PHP的聊天室编程思想-PHP教程,PHP基础
- C语言指针中 *p 和 p 的区别
热门文章
- html hint标签,htmlhint
- java 同步 异步 阻塞 非阻塞_Java日志正确使用姿势,大白话搞懂什么是同步/异步/阻塞/非阻塞...
- hibernate clob mysql_Hibernate操作Clob类型数据
- audio插入背景音乐_网页制作中的html插入背景音乐
- float 精度_为什么float后面要加f
- docker server 容器连接sql_Docker 容器的网络连接
- win7必须重新启动计算机才能应用这些更改,专家支招:当商用计算机遇到必须重新启动才能生效的更新...
- 歌曲信息管理c语言,歌曲信息管理系统——C语言
- python学习知识以及就业方向_Python需要学到什么技术 学完可以从事哪些行业
- matplotlib散点图点大小_机器学习Web应用:matplotlib教程