题目来源:Acwing 257.关押罪犯&洛谷 P1525 [NOIP2010 提高组] 关押罪犯
思路来源:这里

题目描述

S 城现有两座监狱,一共关押着 N 名罪犯,编号分别为1~N。
他们之间的关系自然也极不和谐。
很多罪犯之间甚至积怨已久,如果客观条件具备则随时可能爆发冲突。
我们用“怨气值”(一个正整数值)来表示某两名罪犯之间的仇恨程度,怨气值越大,则这两名罪犯之间的积怨越多。
如果两名怨气值为 c 的罪犯被关押在同一监狱,他们俩之间会发生摩擦,并造成影响力为 c 的冲突事件。
每年年末,警察局会将本年内监狱中的所有冲突事件按影响力从大到小排成一个列表,然后上报到 S 城 Z 市长那里。
公务繁忙的 Z 市长只会去看列表中的第一个事件的影响力,如果影响很坏,他就会考虑撤换警察局长。
在详细考察了 N 名罪犯间的矛盾关系后,警察局长觉得压力巨大。
他准备将罪犯们在两座监狱内重新分配,以求产生的冲突事件影响力都较小,从而保住自己的乌纱帽。
假设只要处于同一监狱内的某两个罪犯间有仇恨,那么他们一定会在每年的某个时候发生摩擦。那么,应如何分配罪犯,才能使 Z 市长看到的那个冲突事件的影响力最小?这个最小值是多少?

输入描述

第一行为两个正整数 N 和 M,分别表示罪犯的数目以及存在仇恨的罪犯对数。
接下来的 M 行每行为三个正整数aj,bj,cj,表示aj号和bj号罪犯之间存在仇恨,其怨气值为cj
数据保证1≤aj<bj<N,0<cj≤109 且每对罪犯组合只出现一次。

输出描述

输出共1行,为 Z 市长看到的那个冲突事件的影响力。
如果本年内监狱中未发生任何冲突事件,请输出0。

数据范围

N ≤ 20000 , M ≤ 100000

样例输入

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

样例输出

3512

OP

y总给的方法是二分+染色法判断二分图,这个我不太会。可以参考这篇题解。

思路

这道题所求即是最大影响值最小的分配方案中,最大的影响值。

想让最大影响值最小,我们便需要首先让仇恨值最大的两名罪犯优先分配到不同监狱,再分配次大的,以此类推,直到某对罪犯无法分配。

那么我们应该如何标记对监狱的分配呢?

先大概说一下并查集补集,这道题中,如果 f a t h e r [ x ] = y + n father[x]=y+n father[x]=y+n 则说明x与y在不同监狱。
即通过+n,错过前n个数组位,在n+1~2*n的空间上建立一个扩展域来存放补集。

如果a,b罪犯在之前已经因为与c囚犯的怒气值分配进同一个监狱,就会发生如下情形:
若 A ( a , c ) > A ( a , b ) , A ( b , c ) > A ( a , b ) A_{(a,c)}>A_{(a,b)},A_{(b,c)}>A_{(a,b)} A(a,c)​>A(a,b)​,A(b,c)​>A(a,b)​;
则在遍历至 ( a , b ) (a,b) (a,b)对之前,就会有 f a t h e r [ a ] = c + n , f a t h e r [ b ] = c + n father[a]=c+n,father[b]=c+n father[a]=c+n,father[b]=c+n;
此时就会出现 f a t h e r [ a ] = f a t h e r [ b ] father[a]=father[b] father[a]=father[b];
即冲突无法避免,输出 A ( a , b ) A_{(a,b)} A(a,b)​即可。

代码

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll N=100005;
int fa[N]={0};//n的数据范围是2e4,N是1e5,满足2*n
struct dat
{int a,b,c;
}da[N];
bool cmp(dat a,dat b)
{return a.c>b.c;
}
int find(int x)
{return fa[x]==x?x:fa[x]=find(fa[x]);
}
int main()
{int n,m,i;cin>>n>>m;for(i=1;i<=m;i++)scanf("%d%d%d",&da[i].a,&da[i].b,&da[i].c);//接收sort(da+1,da+1+m,cmp);//排序for(i=1;i<=2*n;i++)fa[i]=i;//初始化并查集for(i=1;i<=m;i++){//printf("*%d %d\n",find(da[i].a),find(da[i].b));if(find(da[i].a)==find(da[i].b))//若无法分进不同监狱{printf("%d",da[i].c);return 0;}else//若可以{fa[find(da[i].a)]=find(da[i].b+n);//注fa[find(da[i].b)]=find(da[i].a+n);}}printf("0");//若所有都被分完,无冲突return 0;
}

注:这里若是fa[find(da[i].a)]=da[i].b+n;,则会爆MLE,迷惑

ED

\

关押罪犯-并查集、贪心相关推荐

  1. [NC16591]关押罪犯 并查集

    题解:很明显的并查集,但因为它们带有权值,所以我们先要把他排序,我们要尽可能让危害大的罪犯在两个监狱里(这里有一点贪心的味道). 1.首先我们把它门按照之间的影响值从大到小排序. 2.假设a与b是敌人 ...

  2. 关押罪犯 并查集~~~

    关押罪犯 S城现有两座监狱,一共关押着N名罪犯,编号分别为1~N.他们之间的关系自然也极不和谐.很多罪犯之间甚至积怨已久,如果客观条件具备则随时可能爆发冲突.我们用"怨 气值"(一 ...

  3. CF 1253D-Harmonious Graph-并查集+贪心

    Description You're given an undirected graph with n nodes and m edges. Nodes are numbered from 1 to ...

  4. 洛谷 P1967货车运输 并查集+贪心 不需要用LCA!

    题目链接 题目链接 题解 要求所有的路径中最小边长的最大值! 我们贪心的加边,依照边从大往小的方式往里添加,然后合并并查集. 每次当查询分布在两个待合并的并查集的时候,当前的边长就是这次查询的答案. ...

  5. nssl1454-最短路【并查集,贪心】

    正题 题目大意 nnn个点,每个点可以走到[ai,n][a_i,n][ai​,n],每个点可以从[bi,n][b_i,n][bi​,n]到达. 求disi,j∗(i+j)dis_{i,j}*(i+j) ...

  6. HDOJ 1598 find the most comfortable road(并查集+贪心)

    find the most comfortable road Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K ...

  7. BZOJ 3430: [Usaco2014 Jan]Ski Course Rating(并查集+贪心)

    题面 Time Limit: 10 Sec Memory Limit: 128 MB Submit: 136 Solved: 90 [Submit][Status][Discuss] Descript ...

  8. CF878E-Numbers on the blackboard【并查集,贪心】

    正题 题目链接:https://www.luogu.com.cn/problem/CF878E 题目大意 nnn个数字,每次可以把两个相邻的数字x,yx,yx,y变为x+2yx+2yx+2y. mmm ...

  9. POJ1456贪心(set或者并查集区间合并)

    题意:       给你n商品,每个商品有自己的价值还有保质期,一天最多只能卖出去一个商品,问最大收益是多少? 思路:       比较好想的贪心,思路是这样,每一次我们肯定拿价值最大的,至于在那天拿 ...

最新文章

  1. JAVA SE学习day_06:字符流、异常处理
  2. linux下的动态链接库和静态链接库到底是个什么鬼?(一)静态链接库的编译与使用...
  3. EasyCriteria已演变为uaiCriteria。 新名称和更多功能
  4. CE下基于Zylonite硬件平台的SD卡驱动开发
  5. html5播放器 迅雷,搜狗浏览器HTML5视频播放器插件(HTML5.Video.Player)
  6. STM32 I2C通信(读写eeprom)
  7. tensorflow——deeplabv3+训练cityscapes数据集(未完待续)
  8. 支持x64的开发工具
  9. 小型pascal编译器C语言代码,Pascal简单编译器
  10. Xshell 外观配置
  11. 揭秘 | Akuna工作体验大揭秘
  12. mysql下载不是运作宝教程_魔力宝贝私服架设教程
  13. 南京大学计算机专业复试面试,2014 CS复试全面回忆 上机真题 面试血泪史
  14. 计算机网络没有接收什么情况,电脑网络连接失败 网卡只有发送没有接收该怎么办?...
  15. FPGA:ov7725摄像头通过VGA/HDMI显示RGB565格式的图像
  16. 海思hi3716c机顶盒接usb摄像头和usb无线耳机时,无线耳机有时没有声音
  17. 2019强网杯 - 密码学-RSA-Coppersmith
  18. 安装好maya后运行不了并弹出如图的错误
  19. Java遍历list集合转换成PDF
  20. python集合和列表、安从小到大的顺序组合成一个字典_第3章 Python容器:列表、元组、字典与集合...

热门文章

  1. 有史以来最怪异的十种键盘
  2. 国际贸易术语解释通则(FCA 货交承运人(……指定地点))
  3. java pdf加密文件,java使用itext为pdf文件设置密码保护
  4. 中债登、银行间市场、上清所… 这些机构你能分清几个?
  5. Linux DRM Developer's Guide
  6. 100道软件测试练习题,看看你能有多少分
  7. 根据工资计算应缴纳的党费
  8. java 千分符_java中关于千分位
  9. 安卓隐藏输入法键盘以及去除光标方法
  10. LTHTB五脚充电芯片规格书,LTH7B规格书