题目链接:https://www.luogu.org/problemnew/show/P1525

题目分析

  通过分析,我们可以知道,这道题的抽象意义就是把一个带边权的无向图,分成两个点集,使得两个集合中的每两个点之间的边权最大的最小。问这个边权是多少。

  我们不妨可以想一下,如果$a$和$b$是敌人,但$a$和$b$的有些敌人不是敌人,对于处理$a$来说,肯定是把他和那些$b$的敌人放在一起比较好。    再来看下题目,尽可能地让最大的最小,所以我们可以贪心一下下~~~   把所有的“敌人对”按照边权从大到小排个序。 然后按顺序判$a$ ,$b$在不在一个点集里头(这里便用到了并查集,直接查父亲是不是一个就好),如果在,就可以输出边权了。如果不在,把$a$和$b$的敌人放在一起,$b$和$a$的敌人放在一起(参见上上行)。

  肯定有人要问为什么。呃。。 因为边权是排过序的,第一个匹配不上的肯定是最优解。(此处需脑补一下。。)

  呃。。然后就可以开始码代码了。

  

#include <stdio.h>
#include <algorithm>
using namespace std;
const int M=100003;
const int N=20003;
struct node
{
int x, y, z;
}f[M];
int a[N];
int b[N];
bool cmp(node x,node y)
{
return x.z > y.z;
}
int find(int x)
{
if(a[x] == x)
return x;
a[x] = find(a[x]);
return a[x];
}
void update(int x,int y)
{
int fx = find(x);
int fy = find(y);
a[fx] = fy;
}
bool check(int x,int y)
{
int fx = find(x);
int fy = find(y);
if(fx == fy)
return true;
return false;
}
int main()
{
int n, m;
scanf("%d%d",&n,&m);
for(int i = 1;i <= n; i ++)
a[i]=i;
for(int i = 1;i <= m; i ++)
scanf("%d%d%d",&f[i].x,&f[i].y,&f[i].z);
sort(f+1,f+1+m,cmp);
for(int i = 1;i <= m+1; i ++)
{
if(check(f[i].x,f[i].y))
{
printf("%d",f[i].z);
break;
}
else
{
if(!b[f[i].x])
b[f[i].x]=f[i].y;
else
update(b[f[i].x],f[i].y);
if(!b[f[i].y])
b[f[i].y]=f[i].x;
else
update(b[f[i].y],f[i].x);
}
}
return 0;
}

洛谷 P1525 关押罪犯 NOIp2010提高组 (贪心+并查集)的更多相关文章

  1. 洛谷 P1525 关押罪犯 & [NOIP2010提高组](贪心,种类并查集)

    传送门 解题思路 很显然,为了让最大值最小,肯定就是从大到小枚举,让他们分在两个监狱中,第一个不符合的就是答案. 怎样判断是否在一个监狱中呢? 很显然,就是用种类并查集. 种类并查集的讲解——团伙(很 ...

  2. 洛谷 P1525 关押罪犯

    题目链接 https://www.luogu.org/problemnew/show/P1525 题目描述 S城现有两座监狱,一共关押着N名罪犯,编号分别为1−N.他们之间的关系自然也极不和谐.很多罪 ...

  3. 洛谷P1525 关押罪犯

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

  4. 洛谷1525 关押罪犯NOIP2010 并查集

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

  5. 洛谷 P1525 关押罪犯==codevs 1069 关押罪犯[NOIP 2010]

    P1525 关押罪犯 513通过 1.4K提交 题目提供者该用户不存在 标签图论并查集NOIp提高组2010 难度普及+/提高 提交该题 讨论 题解 记录 最新讨论 咳咳.竟MLE了. 囧.运行时错误 ...

  6. 洛谷 P1541 乌龟棋 & [NOIP2010提高组](dp)

    传送门 解题思路 一道裸的dp. 用dp[i][j][k][kk]表示用i个1步,j个2步,k个3步,kk个4步所获得的最大价值,然后状态转移方程就要分情况讨论了(详见代码) 然后就是一开始统计一下几 ...

  7. [NOIP2010] 提高组 洛谷P1525 关押罪犯

    刚才做并查集想到了这道以前做的题,干脆一并放上来 题目描述 S 城现有两座监狱,一共关押着N 名罪犯,编号分别为1~N.他们之间的关系自然也极不和谐.很多罪犯之间甚至积怨已久,如果客观条件具备则随时可 ...

  8. 洛谷-关押罪犯-NOIP2010提高组复赛

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

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

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

随机推荐

  1. 容易上手搭建vue2.0开发环境

    第一步:安装node 前端开发框架和环境都是需要 Node.js ,先安装node.js开发环境,vue的运行是要依赖于node的npm的管理工具来实现,下载https://nodejs.org/en ...

  2. Python模拟登录淘宝

    最近想爬取淘宝的一些商品,但是发现如果要使用搜索等一些功能时基本都需要登录,所以就想出一篇模拟登录淘宝的文章!看了下网上有很多关于模拟登录淘宝,但是基本都是使用scrapy.pyppeteer.sel ...

  3. AutoCAD C#二次开发

    https://www.cnblogs.com/gisoracle/archive/2012/02/19/2357925.html using System; using System.Collect ...

  4. Python爬虫视频教程

    ├─第1章_[第0周]网络爬虫之前奏 │ ├─第1节_"网络爬虫"课程内容导学 │ │ 第1部分_全课程内容导学.mp4 │ │ 第2部分_全课程内容导学(WS00单元)学习资料. ...

  5. Hive 系列(四)—— Hive 常用 DDL 操作

    一.Database 1.1 查看数据列表 show databases; 1.2 使用数据库 USE database_name; 1.3 新建数据库 语法: CREATE (DATABASE|SC ...

  6. 性能测试学习第五天-----Jmeter测试脚本&基础元件使用

    JMeter简介:一个100%的纯Java桌面应用,由Apache组织的开放源代码项目,它是功能和性能测试的工具.具有高可扩展性.支持Web(HTTP/HTTPS).SOAP.FTP.JAVA等多种协 ...

  7. jdk_Windows基础环境配置

    JAVA环境配置 windows 系统环境变量配置: JAVA_HOME C:\Java\jdk1.8.0_25 Path %JAVA_HOME%\bin; classpath .;%JAVA_HOM ...

  8. silverlight中递归构造无限级树treeview+checkbox

    两个实体,其实一个实体也能构造出来,我这里是为了增加一个 checkbox //第一个实体 public class person { public int no { get; set; } publ ...

  9. python批量处理压缩文件

    python批量处理压缩文件 博客小序:在数据的处理中,下载的数据很有可能是许多个压缩文件,自己一个一个解压较为麻烦,最近几日自己在处理一次下载的数据时,遇到大量的压缩数据需要处理,于是利用pytho ...

  10. Nginx反向服务器搭建

    Nginx环境搭建 下载解压Nginx源码包 可以通过已有的压缩包 这里也可以通过yum的在线下载 wget http://nginx.org/download/nginx-1.13.7.tar.gz ...