明灯三千,花开满城|

伍六柒-

园龄:3年6个月粉丝:9关注:6

洛谷P1525关押罪犯

关押罪犯

题目描述

S 城现有两座监狱,一共关押着 NN 名罪犯,编号分别为 1-N1−N。他们之间的关系自然也极不和谐。很多罪犯之间甚至积怨已久,如果客观条件具备则随时可能爆发冲突。我们用“怨气值”(一个正整数值)来表示某两名罪犯之间的仇恨程度,怨气值越大,则这两名罪犯之间的积怨越多。如果两名怨气值为 cc 的罪犯被关押在同一监狱,他们俩之间会发生摩擦,并造成影响力为 cc 的冲突事件。

每年年末,警察局会将本年内监狱中的所有冲突事件按影响力从大到小排成一个列表,然后上报到 S 城 Z 市长那里。公务繁忙的 Z 市长只会去看列表中的第一个事件的影响力,如果影响很坏,他就会考虑撤换警察局长。

在详细考察了NN 名罪犯间的矛盾关系后,警察局长觉得压力巨大。他准备将罪犯们在两座监狱内重新分配,以求产生的冲突事件影响力都较小,从而保住自己的乌纱帽。假设只要处于同一监狱内的某两个罪犯间有仇恨,那么他们一定会在每年的某个时候发生摩擦。

那么,应如何分配罪犯,才能使 Z 市长看到的那个冲突事件的影响力最小?这个最小值是多少?
输入描述
每行中两个数之间用一个空格隔开。第一行为两个正整数 N,M,分别表示罪犯的数目以及存在仇恨的罪犯对数。接下来的 M 行每行为三个正整数 a ,b ,c 表示编号为 a 的罪犯与编号为 b 的罪犯之间的怨气值为 c,且每对罪犯组合只出现一次。(1 <= a <= b <= N,0 <= c <=1e9)
输出描述
共 1 行,为 Z 市长看到的那个冲突事件的影响力。如果本年内监狱中未发生任何冲突事件,请输出 0
原题链接


Input

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

Output

3512

AC代码

#include <iostream>
#include <algorithm>
using namespace std;
struct node {
int x,y,w;
};
const int N = 2e4 + 10,M = 1e5+10;
node arr[M]; //存关系
int h[N],e[N],n,m; // h存的是谁跟谁已经在一个监狱里面了(并查集思想),e存的是谁的敌人是谁
bool cmp (node a,node b){
return a.w > b.w;
}
int find (int x){ //查找 x 所在的监狱
if(h[x] != x) x = find(h[x]);
return x;
}
void add (int x,int y){ //合并x,y所在的犯人堆
h[find(x)] = find(y);
}
bool check (int x,int y){ //判断x,y是否在同一个监狱
if(find(x) == find(y)) return true;
return false;
}
void init (){ // 初始化
for(int i = 1; i <= n; i++)
h[i] = i;
}
int main(){
scanf("%d%d",&n,&m);
init();
for(int i = 0; i < m; i++)
scanf("%d%d%d",&arr[i].x,&arr[i].y,&arr[i].w);
sort(arr,arr + m,cmp);
for(int i = 0; i < m + 1; i++){
if(check(arr[i].x,arr[i].y)) { //如果 x 和 y 已经在一个监狱里面了就输出,不懂的话可以自已用这个代码走一下样例
printf("%d",arr[i].w);
break;
}
else{
if(!e[arr[i].x]) e[arr[i].x] = arr[i].y; // 如果 x 还没有敌人,就让 x 的敌人为 y
else add(e[arr[i].x],arr[i].y); // 如果 x 已经有敌人,就让 x 的敌人与 y 合并
if(!e[arr[i].y]) e[arr[i].y] = arr[i].x; // 同理
else add(e[arr[i].y],arr[i].x);
}
}
return 0;
}

本文作者:伍六柒-

本文链接:https://www.cnblogs.com/paper-plane/p/15196582.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   伍六柒-  阅读(52)  评论(4编辑  收藏  举报
编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
· 为什么 退出登录 或 修改密码 无法使 token 失效
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
展开