[NC16591]关押罪犯 并查集

news/2024/7/2 23:31:07

题解:很明显的并查集,但因为它们带有权值,所以我们先要把他排序,我们要尽可能让危害大的罪犯在两个监狱里(这里有一点贪心的味道)。
1.首先我们把它门按照之间的影响值从大到小排序。
2.假设a与b是敌人,那么我们吧a,b分开放置,并且记录a的敌人是b,b的敌人是a
3.又假设a与c是敌人,这样的话我们记录一下c的敌人是a,这样的话,b和c就在一个监狱里,所以把他俩合并起来,怎么知道b与c在一个监狱呢,这是因为我们用rem数组记录了a的敌人,敌人的敌人是朋友,所以b,c合并
4.又说b和c是敌人,但是他俩已经被分到一个监狱了,所以直接输出他俩之间的影响值。
怎么证明他俩之间的影响值是最小的呢,因为我们之前已经按照权值排序了,已经尽可能不让权值大的在一起,所以这样输出是对的。
也可以这样理解,如果不把他俩放在一起,而分开放置,那么前面一定会有冲突的,并且前面的权值较大,所以不是最优解。

代码:

/*Keep on going Never give up*/
#pragma GCC optimize(3,"Ofast","inline")
#include <bits/stdc++.h>
const int maxn = 1e5+10;
const int MaxN = 0x3f3f3f3f;
const int MinN = 0xc0c0c00c;
typedef long long ll;
const int mod = 100000000;
using namespace std;
struct wazxy{ll x,y,w;
}a[maxn];
struct rule{bool operator()(const wazxy & a,const wazxy & b){return a.w>b.w;}
};
int f[maxn],rem[maxn];
int ifind(int x){if(x==f[x]) return x;return f[x]=ifind(f[x]);
}
void  mer(int x,int y){f[ifind(x)]=ifind(y);
}
int main(){int n,m;cin>>n>>m;for(int i=0;i<=n;i++) f[i]=i;for(int i=0;i<m;i++) scanf("%lld%lld%lld",&a[i].x,&a[i].y,&a[i].w);sort(a,a+m,rule());for(int i=0;i<m;i++){int dx=ifind(a[i].x);int dy=ifind(a[i].y);if(dx==dy){cout<<a[i].w<<endl;return 0;}if(!rem[a[i].x])   rem[a[i].x]=a[i].y;else mer(rem[a[i].x],a[i].y);if(!rem[a[i].y])   rem[a[i].y]=a[i].x;else mer(rem[a[i].y],a[i].x);}cout<<0<<endl;return 0;
}

http://lihuaxi.xjx100.cn/news/285825.html

相关文章

简单分析MySQL 一则慢日志监控误报问题

这篇文章主要介绍了MySQL 一则慢日志监控误报的问题分析与解决&#xff0c;帮助大家更好的理解和使用MySQL&#xff0c;感兴趣的朋友可以了解下 之前因为各种原因&#xff0c;有些报警没有引起重视&#xff0c;最近放假马上排除了一些潜在的人为原因&#xff0c;发现数据库的慢…

一直在努力的你是否也是这样的(经典语录总结)

1.下次再遇见喜欢的人&#xff0c;一定要提醒自己&#xff0c;只做朋友&#xff0c;只谈笑风生&#xff0c;不可以动情&#xff0c;不远不近的欣赏&#xff0c;淡淡的喜欢&#xff0c;不至于最后乱了初心&#xff0c;败了芳华。 ——杨绛 2.走好选择的路&#xff0c;别选择好走…

前缀和 + ST表 ---- CF 1556 E. Equilibrium(两个序列 + - 操作使得每位相等) 详解

题目连接 题目大意&#xff1a; 就是给你两个长度为nnn的a,ba,ba,b数组&#xff0c;给你q∈[1,1e5]q\in[1,1e5]q∈[1,1e5]次询问&#xff0c;每次询问一个区间[l,r][l,r][l,r] 你对这个区间里面的数可以进行一下操作 取出偶数个位置 l≤pos1<pos2<....<posz≤r∣[z%…

手写 30 个主流机器学习算法,代码超 3 万行,全都开源了!

点击上方“视学算法”&#xff0c;选择“星标”公众号第一时间获取价值内容本文经机器之心&#xff08;ID&#xff1a;almosthuman2014&#xff09;授权转载&#xff0c;禁二次转载参与&#xff1a;思源、一鸣、张倩用 NumPy 手写所有主流 ML 模型&#xff0c;普林斯顿博士后 D…

赵本山:我的时代还没有结束 | Python告诉你

作者 | 丁彦军来源 | 恋习Python&#xff08;ID: sldata2017&#xff09;【AI科技大本营按】今年春晚的小品好看吗&#xff1f;没有了赵本山的春晚总觉得少了点什么&#xff0c;然而许久不登春晚舞台的本山大叔借着B站的东风证明了「你大爷还是你大爷」。最近很多人被“改革春…

RSS 语法概述

RSS 指 Really Simple Syndication&#xff08;真正简易联合&#xff09;&#xff0c;RSS 2.0 的语法很简单&#xff0c;也很严格。RSS 用于在网站间分享信息。RSS 语法 RSS 2.0 的语法很简单&#xff0c;也很严格。 RSS 如何工作 RSS 用于在网站间分享信息。 使用 RSS&…

[NOI2015]程序自动分析

题解&#xff1a;并查集&#xff0c;因为数据比较大嘛&#xff0c;你要是想再所以如果开1e9的数组大小&#xff0c;那毫无疑问&#xff0c;基佬紫等着你。 所以这个题离散化用了map这个容器。 首先&#xff0c;遍历一遍e1的时候&#xff0c;把他们之间相等的都给连到同一个集合…

C++中的Socket编程使用协议发送图片

使用&#xff1a; &#xff08;1&#xff09;首先运行服务端&#xff0c;待服务端运行起来&#xff1b; &#xff08;2&#xff09;最后运行客户端&#xff0c;输入要传输文件到哪个目标机器的IP地址&#xff1b; &#xff08;3&#xff09;输入传输文件的路径及文件&#xff0…