题目来源: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. 手机与Camera CCM技术发展趋势
  2. 用指针式万用表欧姆档检测发光二极管
  3. 日志中的秘密 Windows登录类型都有哪些
  4. 疯子的算法总结(五) 矩阵乘法 (矩阵快速幂)
  5. k8s pod内部容器_第三章 pod:运行于kubernetes中的容器
  6. 强化顶层设计 巩固网络安全
  7. 分享一个外泌体数据库
  8. maven安装及配置
  9. 渗透测试专业人员使用的11种工具
  10. Hudson poll scm 时间格式说明
  11. 赤兔oracle恢复软件 收费,赤兔Oracle数据库恢复软件下载 v11.6官方版-下载啦
  12. 哆啦A梦的神奇口袋 - 这全是宝藏 https://baozangku.com/
  13. GeoTrans2.4.1 用户手册 之 (六)笔记
  14. 计算机应用程序无响应,必看!电脑运行卡或软件卡死无响应,怎么办?
  15. Ubuntu下locale命令路径无法找到问题解决方法:Cannot set LC_CTYPE to default locale: No such file or directory
  16. LaTeX:多张图片排版
  17. windows环境部署django项目(可部署不同版本的django)
  18. 学编程遇到的数学知识
  19. 什么是生态型平台企业?
  20. 面试运维没工作经验怎么办?

热门文章

  1. fatal: Authentication failed for认证失败问题
  2. 下载的文件为什么会误报病毒?
  3. 小山丘的秘密-BugkuCTF
  4. 小米手机耳机音量太大——解决办法
  5. Management Accounting for Business Decisions读书笔记
  6. 手把手教你做抽奖转盘(自定义alert(弹出框
  7. 界面控件套包DevExpress 2020年首发v20.1.3
  8. 尊老为德 爱老为美 普宁市金梅花慈善爱心协会关爱东明康养院活动
  9. ctf中linux内核态的漏洞挖掘与利用系列1
  10. 如何写成Strview.js之源码剖析