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(并查集-关系)相关推荐

  1. C++ (PTA) 红色警报 并查集

    题目: 战争中保持各个城市间的连通性非常重要.本题要求你编写一个报警程序,当失去一个城市导致国家被分裂为多个无法连通的区域时,就发出红色警报.注意:若该国本来就不完全连通,是分裂的k个区域,而失去一个 ...

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

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

  3. 亲戚关系关系算法java程序_C++并查集亲戚(Relations)算法实例

    本文实例讲述了C++并查集亲戚(Relations)算法.分享给大家供大家参考.具体分析如下: 题目: 亲戚(Relations) 或许你并不知道,你的某个朋友是你的亲戚.他可能是你的曾祖父的外公的女 ...

  4. 并查集应用-判断亲戚关系

    题目背景 若某个家族人员过于庞大,要判断两个是否是亲戚,确实还很不容易,现在给出某个亲戚关系图,求任意给出的两个人是否具有亲戚关系. 题目描述 规定:x和y是亲戚,y和z是亲戚,那么x和z也是亲戚.如 ...

  5. 亲戚关系(并查集(YYOJ

    题目描述 若某个家族人员过于庞大,要判断两个是否是亲戚,确实还很不容易,现在给出某个亲戚关系图,求任意给出的两个人是否具有亲戚关系. 规定:x和y是亲戚,y和z是亲戚,那么x和z也是亲戚.如果x,y是 ...

  6. 【NOJ1593、1594、1595】【并查集三连】朋友敌人关系

    1593.并查集(一) 时限:1000ms 内存限制:10000K  总时限:3000ms 描述 一个城市中有n个人,其中一些人是朋友关系,同时他们都认为:朋友的朋友是朋友,现在任给两个人,问他们是否 ...

  7. 并查集c++代码_[Leetcode 每日精选](本周主题-并查集) 547. 朋友圈

    题目难度: 中等 原题链接 今天继续来做并查集的问题, 这道题仍然比较基础, 而且也是个比较接近现实的问题了. 大家在我的公众号"每日精选算法题"中的聊天框中回复 并查集 就能看到 ...

  8. HDU1811 Rank of Tetris 拓扑排序+并查集 OR 差分约束最短路+并查集

    题目链接 题意:就是给你一堆关系,看能不能排出个确定的顺序 做法: 1. 拓扑排序+并查集 应该很容易想到的一种思路,大于小于建立单向边.对于相等的呢,就把他们缩成一个点.就用并查集缩成一个点就行了 ...

  9. 关于 并查集(union find) 算法基本原理 以及 其 在分布式图场景的应用

    二月的最后一篇水文-想写一些有意思的东西. 文章目录 环检测在图数据结构中的应用 深度/广度优先 检测环 并查集数据结构 (Union-Find) 基本概念 初始化 合并 union 查找祖先 优化1 ...

最新文章

  1. Caffe中对MNIST执行train操作执行流程解析
  2. c++找不到标识符_沪C转沪牌流程攻略大全
  3. opencv-python将.tif格式的图像转为png格式
  4. Spring Bean引用例子
  5. mysql秒级平滑_DDM实践:数据库秒级平滑扩容方案
  6. Pygame 整活五子棋
  7. JavaScript日期格式化处理
  8. JavaScript算法(实例七)空瓶子换汽水问题
  9. 常见Linux版本概览
  10. 联想笔记本linux无线网卡驱动下载,联想无线网卡驱动下载-联想 X1 Carbon网卡驱动下载v18.40.0 官方最新版-西西软件下载...
  11. windows下查看文件md5值
  12. [ 服务器 ] ___ Linux : Tftpd
  13. 实朴检测深交所上市:市值44亿 应收账款逾期6587万
  14. 高斯消去法解线性方程组C++实现
  15. 降本增效的革命性工具: Share Creators 数字资产管理利器
  16. 北京金普蝶:让客户满意就是最好的营销!
  17. Wireshark软件使用
  18. 全志T7/T507 Qt5.12.5移植记录
  19. php 聊天室 教程,基于PHP的聊天室编程思想-PHP教程,PHP基础
  20. C语言指针中 *p 和 p 的区别

热门文章

  1. html hint标签,htmlhint
  2. java 同步 异步 阻塞 非阻塞_Java日志正确使用姿势,大白话搞懂什么是同步/异步/阻塞/非阻塞...
  3. hibernate clob mysql_Hibernate操作Clob类型数据
  4. audio插入背景音乐_网页制作中的html插入背景音乐
  5. float 精度_为什么float后面要加f
  6. docker server 容器连接sql_Docker 容器的网络连接
  7. win7必须重新启动计算机才能应用这些更改,专家支招:当商用计算机遇到必须重新启动才能生效的更新...
  8. 歌曲信息管理c语言,歌曲信息管理系统——C语言
  9. python学习知识以及就业方向_Python需要学到什么技术 学完可以从事哪些行业
  10. matplotlib散点图点大小_机器学习Web应用:matplotlib教程