Energy

发布时间: 2017年3月27日 11:31   最后更新: 2017年3月27日 18:30   时间限制: 1000ms   内存限制: 256M

描述

人类准备发射载人飞船前往火星。

飞船使用了一种特殊的反物质燃料来作为动力,在飞船的制造期间,同时人类也在从宇宙

的各个地方收集这种反物质燃料。收集到的燃料被压缩成一些能量块存储在仓库中。

由于对反物质的特性并没有完全研究透彻,人类发现这些能量块两两之间都可能存在一种

诡异的能量排斥现象,如果不能妥善解决存储问题,将影响到未来的许多工作。

科学家建造了2 个特殊的仓库用于存放,当两块存在冲突的能量块被分别存放在两个仓

库中时,它们的排斥作用就可以忽略不计了,只需要考虑存放在同一个仓库中的能量块的排斥

情况。为了存储这些能量块,仓库需要用特殊材料制造,仓库需要承受的排斥能量越高,则建

造仓库所需要的材料也越多。

为了减少建造材料的使用,不得不重新考虑收集得到的这n 块能量块的存储分配问题。

现在,给出所有这n 块能量块之间的冲突情况,要求找到一种分配方案,使得两个仓库中

最高的冲突值最小。只要输出那个冲突值即可。

输入

第一行是一个整数T,表示将有T 组数据。
对于每一组数据:
第一行是2 个整数n、m,分别表示能量块的数量,以及它们之间有冲突的对数;(n
20000;m 100000) 第2 m+1 行,每行3 个整数a、b、c,表示能量块a 与能量块b 之间存
在冲突,且它们能量排斥所产生的冲突值为c。(a; b n; 0 c 1000000000)

输出

对于每一组数据:
首先输出“Case #x:”,x 表示当前测试数据的序号。
然后是一个整数,表示两个仓库中的最大冲突值。

样例输入1 复制

1
4 6
1 4 2534
2 3 3512
1 2 28351
1 3 6618
2 4 1805
3 4 12884

样例输出1

Case #1:
3512

提示

对于以上样例说明如下:

采用这种方式分配存储,两个仓库中的最大冲突值为3512,其他任何方法都不会有更好的结果。

题解:

采用种类并查集

用贪心的方法,按边从大到小考虑,并把两个材料设置为不同的种类,这样的话,当检测到两个材料属于同一种类时候,直接结束。输出答案

#include <iostream>
#include <algorithm>
#include <cstdio>
using namespace std;
const int MAX = 1e5 + 5;
typedef long long LL;
int parent[MAX];
int group[MAX];
typedef pair<int,pair<int,LL> > P;
P es[MAX];
int find(int x)
{if(x == parent[x]) return x;int tmp = parent[x];parent[x] = find(parent[x]);group[x] = (group[x] + group[tmp]) % 2;return parent[x];
}
void init()
{for(int i = 0;i < MAX;i++)parent[i] = i,group[i] = 0;
}
int main()
{int T;scanf("%d",&T);LL cas = 0;while(T--){init();int n,m;scanf("%d%d",&n,&m);for(int i = 0;i < m;i++){int a,b;LL c;scanf("%d%d%lld",&a,&b,&c);es[i].first = -c;es[i].second.first = a;es[i].second.second = b;}sort(es,es + m);int ans = 0;for(int i = 0;i < m;i++){int c = -es[i].first;int a = es[i].second.first;int b = es[i].second.second;int fx = find(a);int fy = find(b);if(fx != fy){parent[fx] = fy;group[fx] = (group[b] - group[a] + 1)%2;}else{if(group[a] == group[b])//同一类ans = c; }if(ans) break;}printf("Case #%d:\n%lld\n",++cas,ans);}
}
/*
2
4 6
1 4 2534
2 3 3512
1 2 28351
1 3 6618
2 4 1805
3 4 12884
4 6
1 4 2534
2 3 3512
1 2 28351
1 3 6618
2 4 1805
3 4 12884
*/

2016陕西省ACM 热身体B 种类并查集相关推荐

  1. Poj(1703),种类并查集

    题目链接:http://poj.org/problem?id=1703 已经不是第一次接触种类并查集了,直到今天才搞懂. 感谢红黑联盟,感谢杰哥!!! 每个节点只要关系确定,不管是不是同一个集合里面, ...

  2. BZOJ 1370: [Baltic2003]Gang团伙 [并查集 拆点 | 种类并查集WA]

    题意: 朋友的朋友是朋友,敌人的敌人是朋友:朋友形成团伙,求最多有多少团伙 种类并查集WA了一节课,原因是,只有那两种关系才成立,诸如朋友的敌人是朋友之类的都不成立! 所以拆点做吧 #include ...

  3. poj 1703(种类并查集)

    题目大意:在这个城市里有两个黑帮团伙,现在给出N个人,问任意两个人他们是否在同一个团伙 输入D x y代表x于y不在一个团伙里 输入A x y要输出x与y是否在同一团伙或者不确定他们在同一个团伙里 解 ...

  4. Find them, Catch them POJ - 1703(种类并查集)

    题意: 在这个城市里有两个黑帮团伙,现在给出N个人,问任意两个人他们是否在同一个团伙 1.输入D x y代表x于y不在一个团伙里 2.输入A x y要输出x与y是否在同一团伙或者不确定他们在同一个团伙 ...

  5. Mahmoud and a Dictionary CodeForces - 766D 种类并查集

    题意 给出多个字符串 然后再输入多个字符串之间的关系 让我们判断这其中是否存在矛盾的关系 有矛盾输出NO 没矛盾输出 YES 然后再输入多个询问 每个询问 两个字符串 让我们判断其中的关系 同义词输出 ...

  6. POJ 1703 Find them, Catch them 种类并查集

    题意 给出一堆点和关系 D为两点不同集合 A为查询两点是否不同集合 n<=1e5 code #include<cstdio> #include<iostream> #in ...

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

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

  8. POJ1182 食物链---(经典种类并查集)

    题目链接:http://poj.org/problem?id=1182 食物链 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: ...

  9. 种类并查集(POJ1703)

    图学的有点自闭,再加上用到了并查集.模拟栈.搜索,先补一下这些相对基础的东西 跟普通并查集区别: 1.数组开两倍 2.union_set(a+n,b)和union_set(a,b+n); 3.判断: ...

最新文章

  1. docker容器运行mysql持久化_docker容器实现数据持久化的两种方式及其区别
  2. 一图读懂丨2019新型冠状病毒,你需要知道什么?
  3. 探秘小程序(9):父页面与自定义组件交互
  4. Qt C++属性类型提供给 QML调用(五)
  5. 【PHP】PHPExcel类 excel常用操作小结
  6. micropython固件源码_Micropython加速物联网开发7 - Micropython源码编译与固件更新
  7. 三位bcd加法计数器_两个8位BCD编号的加法| 8085微处理器
  8. CSS3 伪类和伪元素
  9. 大规模C++软件开发 - notes
  10. 纬地道路纵断面设计教程_如何高效算量?市政道路从识图算量到施工工艺,一篇全搞定!...
  11. 入职美团定级P7,总结2022年最新最全180道高级岗面试题及答案
  12. 一篇论文8778个作者:人均写5个字,署名用了17页
  13. 多元统计分析 多元线性回归 python代码实现 简单线性回归
  14. new ext.toolbar控制按钮间距_消防控制室现场验收存在问题图解
  15. Java多线程--1--stop方法
  16. java求圆的面积和周长
  17. 中原工学院计算机二级证书,中原工学院@计算机等级考试二级MS_Office基础知识(常考知识点记忆).doc...
  18. Unity3d 与罗技G29交互
  19. Android 仿今日头条频道管理(下)(GridView之间Item的移动和拖拽)
  20. android 金额输入弹窗,金额输入框_小罗的安卓学习记录的技术博客_51CTO博客

热门文章

  1. python监控键盘输入_Python实现监控键盘鼠标操作示例【基于pyHook与pythoncom模块】...
  2. leetcode257. 二叉树的所有路径(两种做法)
  3. 敲黑板!vue3重点!一文了解Composition API新特性:ref、toRef、toRefs
  4. 2.5w字长文爆肝 C++动态内存与智能指针一篇搞懂!太顶了!!!
  5. Visitor(访问者)--对象行为型模式
  6. Redis--事务理解
  7. Harbour.Space Scholarship Contest 2021-2022 E. Permutation Shift 思维 + 剪枝
  8. 对数位dp的一些拙见
  9. 《算法竞赛进阶指南》 0x50 动态规划
  10. Alice and Bob