Luogu 1525 【NOIP2010】关押罪犯 (贪心,并查集)

Description

S城现有两座监狱,一共关押着N名罪犯,编号分别为1~N。他们之间的关系自然也极不和谐。很多罪犯之间甚至积怨已久,如果客观条件具备则随时可能爆发冲突。我们用“怨气值”(一个正整数值)来表示某两名罪犯之间的仇恨程度,怨气值越大,则这两名罪犯之间的积怨越多。如果两名怨气值为c的罪犯被关押在同一监狱,他们俩之间会发生摩擦,并造成影响力为c的冲突事件。每年年末,警察局会将本年内监狱中的所有冲突事件按影响力从大到小排成一个列表,然后上报到S城Z市长那里。公务繁忙的Z市长只会去看列表中的第一个事件的影响力,如果影响很坏,他就会考虑撤换警察局长。

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

Input

每行中两个数之间用一个空格隔开。

第一行为两个正整数N和M,分别表示罪犯的数目以及存在仇恨的罪犯对数。

接下来的M行每行为三个正整数aj,bj,cj,表示aj号和bj号罪犯之间存在仇恨,其怨气值为cj。

数据保证1<=aj<bj<N,0<cj<=1,000,000,000,且每对罪犯组合只出现一次。

Output

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

Sample Input

4 6

1 4 2534

2 3 3512

1 2 28351

1 3 6618

2 4 1805

3 4 12884

Sample Output

3512

Http

Luogu:https://www.luogu.org/problem/show?pid=1525

Source

贪心,并查集

解决思路

首先根据贪心的思路,尽量把影响力大的两个人排在不同的监狱,所以我们从最大向最小拍,直到排到无法分在两个监狱,此时的结果即为最小值。

这个贪心为什么是对的呢?假设我们有现在冲突的两个人,如果要保证这两个人不冲突,一定要拆散前面排好至少一组关系,而前面的影响力是更大的,所以更换前面的不划算。所以这个贪心策略是正确的。

接下来我们考虑如何维护这个不在同一个监狱的关系。首先分析一下,两个人AB不能分在同一个监狱,那么也就意味着A分在与B有冲突的人的监狱,而B分在与A有冲突的人的监狱,那么我们可以看做是把A与B的潜在敌人分在一起。

这个东西是可以用并查集维护的。我们设人i表示这个人,i+n表示人i的潜在敌人(总共n个人),那么如果i与j有冲突,那么合并i与j+n,j与i+n,相当于把i与j的潜在敌人合并,而把j与i的潜在敌人合并。那么不能放的条件就是i与j在同一个集合,此时的影响力就是最终的解。

另:注意判断无解的情况,此时输出0

代码

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<algorithm>
using namespace std; const int maxN=30000*2;
const int maxM=100101;
const int inf=2147483647; class Edge
{
public:
int u,v,w;
}; bool operator < (Edge A,Edge B)
{
return A.w>B.w;
} int n,m;
Edge E[maxM];
int Mayuri[maxN];//并查集 int Find(int x); int main()
{
scanf("%d%d",&n,&m);
for (int i=1;i<=n*2;i++)//初始化并查集
Mayuri[i]=i;
for (int i=1;i<=m;i++)
scanf("%d%d%d",&E[i].u,&E[i].v,&E[i].w);
sort(&E[1],&E[m+1]);//排序,从大到小
bool is_outp=0;
for (int i=1;i<=m;i++)
{
int f1=Find(E[i].u);
int f2=Find(E[i].v);
if (f1!=f2)
{
Mayuri[Find(E[i].u+n)]=Find(E[i].v);//与潜在敌人合并
Mayuri[Find(E[i].v+n)]=Find(E[i].u);
}
else
{
cout<<E[i].w<<endl;
is_outp=1;
break;
}
}
if (is_outp==0)//注意无解的情况
cout<<0<<endl;
return 0;
} int Find(int x)
{
if (Mayuri[x]!=x)
Mayuri[x]=Find(Mayuri[x]);
return Mayuri[x];
}

Luogu 1525 【NOIP2010】关押罪犯 (贪心,并查集)的更多相关文章

  1. NOIP2010 关押罪犯 (并查集)

    若x,y有关系 将x与y的补集, y与x的补集建立关系 ; maxm=; ..maxm,..] of longint; f:..maxn*] of longint; i,j,m,n,x,y,z:lon ...

  2. 洛谷P1525 关押罪犯(并查集、二分图判定)

    本人蒟蒻,只能靠题解AC,看到大佬们的解题思路,%%%%%% https://www.luogu.org/problemnew/show/P1525 题目描述 S城现有两座监狱,一共关押着N名罪犯,编 ...

  3. codevs1069关押罪犯(并查集)

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

  4. P1525 关押罪犯[扩展域并查集]

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

  5. 「Luogu 1525」关押罪犯

    更好的阅读体验 Portal Portal1: Luogu Portal2: LibreOJ Description \(S\)城现有两座监狱,一共关押着\(N\)名罪犯,编号分别为\(1 - N\) ...

  6. AcWing 257. 关押罪犯 (并查集)打卡

    题目:https://www.acwing.com/problem/content/description/259/ 题意:有两个监狱,监狱里面有很多犯人,现在有很多对冲突,还有个冲突值,现在问我们怎 ...

  7. POJ 1456 Supermarket(贪心+并查集)

    题目链接:http://poj.org/problem?id=1456 题目大意:有n件商品,每件商品都有它的价值和截止售卖日期(超过这个日期就不能再卖了).卖一件商品消耗一个单位时间,售卖顺序是可以 ...

  8. 洛谷 P1525 关押罪犯 NOIp2010提高组 (贪心+并查集)

    题目链接:https://www.luogu.org/problemnew/show/P1525 题目分析 通过分析,我们可以知道,这道题的抽象意义就是把一个带边权的无向图,分成两个点集,使得两个集合 ...

  9. NOIP2010关押罪犯[并查集|二分答案+二分图染色 | 种类并查集]

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

  10. 洛谷 P1525 关押罪犯 (贪心,扩展域并查集)

    题意:有\(n\)个罪犯,\(m\)对罪犯之间有仇,现在将这些罪犯分到两个监狱里去,问两个监狱里有仇罪犯之间的最大权值最小为多少. 题解:先按边权从大到小排序,然后贪心,边权大的两个罪犯,我们一定要先 ...

随机推荐

  1. maven docker 插件集成的几个小坑

    昨晚看springboot视频的时候,发现可以使用docker-maven-plugin这个插件直接build出 docker 镜像到远程服务器上,感觉很方便,于是自己也试了一下,但是碰到了几个问题, ...

  2. 【调试技巧】 Fiddler高级用法之url映射请求

    问题场景: 已发布线上APP出现接口错误,如何测试线上APP访问本地请求? 已发布线上H5页面,静态资源或js调试,如何映射本地js? 一般解决方案: 猜测(一般明显问题). 找到原发布包,修改请求资 ...

  3. 软件工程M1/M2总结及阅读作业总结

    一.软件工程M1/M2总结 写下这篇总结的时候,我们的软件项目尚未完工.虽然尝试申请了延期答辩,但最终未能成功.这意味着,我们的项目能否正常发布已经处于了一个微妙的状态.可能可以,也可能不可以.只能尽 ...

  4. 关于在VB.NET中调用使用VC++编写的类库dll的一点笔记

    前言 结对作业要求一出来,我就立刻想到了把“计算核心”封装成dll,然后使用vb.net编写UI调用dll的思路.然而在实现过程中却遇到了很多的问题. 我在这个过程中是负责使用vb.net编写UI并调 ...

  5. 个人博客作业Week3--必应词典案例分析

    第一部分  调研,评测 (软件的bug,功能评测,黑箱测试,第8章 用户调研,12 章软件的用户体验) 下载并使用,按照描述的bug定义,找出几个功能性的比较严重的bug.至少两个.用专业的语言描述( ...

  6. linux第三次实践:ELF文件格式分析

    linux第三次实践:ELF文件格式分析 标签(空格分隔): 20135328陈都 一.概述 1.ELF全称Executable and Linkable Format,可执行连接格式,ELF格式的文 ...

  7. LeetCode 363:Max Sum of Rectangle No Larger Than K

    题目链接 链接:https://leetcode.com/problems/max-sum-of-rectangle-no-larger-than-k/description/ 题解&代码 1 ...

  8. 广商博客冲刺第四五天new

    第三天沖刺傳送門 第六七天沖刺傳送門 以上的前台设计架构已经完成了,现在来完成前台的安卓设计. 首先我们配置了Android SDK Manager 使得程序能在安卓环境下运行. 这就完成了前台安卓的 ...

  9. RequestHolder工具类

    package com.inspire.ssm.common; import com.inspire.ssm.model.SysUser; import javax.servlet.http.Http ...

  10. [kali] 安装完kali之后允许远程ssh

    1. 安装kali 2.控制台登录kali 3. 修改 /etc/ssh/sshd_config 4.将 permitrootlogin 前面的注释去掉,并且后面改为yes 5.然后重启ssd服务 / ...