题解【luoguP1525 NOIp提高组2010 关押罪犯】
题解
算法:
- 一个经典的并查集
- 但是需要用一点贪心的思想
做法:
- 先将给的冲突们按冲突值从大到小进行排序(这很显然)
- 然后一个一个的遍历它们
- 如果发现其中的一个冲突里的两个人在同一个集合里,直接输出当时的冲突值
- 否则,第一个人不妨设其为\(x\),用一个\(op[x]\)来保存上一个与他冲突的人。如果\(op[x]\)为\(0\),也就是还没有上一个冲突,直接将\(op[x]\)赋值为当时的第二个人(不妨设其为\(y\));如果有冲突,则直接将\(op[x]\)与\(y\)合并。
代码:
#include <cstdlib>
#include <cstdio>
#include <algorithm>
#define MAXN 20005
#define MAXM 100005
using namespace std;
int n, m;
int p[MAXN];
int op[MAXN];//保存冲突
int ans;
struct fight
{
int x, y;
int s;
}l[MAXM];
bool cmp(fight t1, fight t2)
{
return t1.s > t2.s;
}//结构体排序
int find(int x)
{
if(p[x] < 0) return x;
return p[x] = find(p[x]);
}//路径压缩
void Union(int x, int y)
{
x = find(x);
y = find(y);
if(x == y) return ;
if(p[x] > p[y]) swap(x, y);
p[x] += p[y];
p[y] = x;
}//合并
int main()
{
scanf("%d%d", &n, &m);
for(int i = 1; i <= n; i++) p[i] = -1;
for(int i = 1; i <= m; i++) scanf("%d%d%d", &l[i].x, &l[i].y, &l[i].s);
sort(l + 1, l + m + 1, cmp);
for(int i = 1; i <= m; i++)
{
int a = l[i].x;
int b = l[i].y;
int fa = find(a);
int fb = find(b);
if(fa == fb)
{
ans = l[i].s;
break;
}
else
{
if(op[a] == 0) op[a] = b; //如果没有冲突,将冲突设置为b
else Union(find(b), find(op[a]));//有冲突,合并
if(op[b] == 0) op[b] = a;
else Union(find(a), find(op[b]));//同上
//主思路
}
}
printf("%d\n", ans);
return 0;
}
题解【luoguP1525 NOIp提高组2010 关押罪犯】的更多相关文章
- NOIP提高组2010 关押罪犯
题目描述 S 城现有两座监狱,一共关押着N 名罪犯,编号分别为1~N.他们之间的关系自然也极不和谐.很多罪犯之间甚至积怨已久,如果客观条件具备则随时可能爆发冲突.我们用“怨气值”(一个正整数值)来表示 ...
- noip提高组 2010 关押罪犯 (洛谷1525)
题目描述 S 城现有两座监狱,一共关押着N 名罪犯,编号分别为1~N.他们之间的关系自然也极不和谐.很多罪犯之间甚至积怨已久,如果客观条件具备则随时可能爆发冲突.我们用"怨气值"( ...
- noip 提高组 2010
T1:机器翻译 题目背景 小晨的电脑上安装了一个机器翻译软件,他经常用这个软件来翻译英语文章. 题目描述 这个翻译软件的原理很简单,它只是从头到尾,依次将每个英文单词用对应的中文含义来替换.对于每个英 ...
- 题解 【luogu P1541 NOIp提高组2010 乌龟棋】
题目链接 题解 题意: 有一些格子,每个格子有一定分数. 给你四种卡片,每次可以使用卡片来前进1或2或3或4个格子并拾取格子上的分数 每张卡片有数量限制.求最大分数. 分析 设\(dp[i]\)为第前 ...
- 2010提高组-C]关押罪犯(扩展域并查集
题:https://www.cometoj.com/problem/0073 #include<bits/stdc++.h> using namespace std; ; struct n ...
- NOIP提高组2010 乌龟棋
小明过生日的时候,爸爸送给他一副乌龟棋当作礼物. 乌龟棋的棋盘是一行N个格子,每个格子上一个分数(非负整数).棋盘第1格是唯一的起点,第N格是终点,游戏要求玩家控制一个乌龟棋子从起点出发走到终点. 乌 ...
- NOIP提高组2004 合并果子题解
NOIP提高组2004 合并果子题解 描述:在一个果园里,多多已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆.多多决定把所有的果子合成一堆. 每一次合并,多多可以把两堆果子合并到一起,消 ...
- [NOIP提高组2018]货币系统
[TOC] 题目名称:货币系统 来源:2018年NOIP提高组 链接 博客链接 CSDN 洛谷博客 洛谷题解 题目链接 LibreOJ(2951) 洛谷(P5020) 大视野在线评测(1425) 题目 ...
- 津津的储蓄计划 NOIp提高组2004
这个题目当年困扰了我许久,现在来反思一下 本文为博客园ShyButHandsome的原创作品,转载请注明出处 右边有目录,方便快速浏览 题目描述 津津的零花钱一直都是自己管理.每个月的月初妈妈给津津\ ...
随机推荐
- 【RandomString】- 随机字符串
RandomString 随机字符串的用法
- 性能度量之Confusion Matrix
例子:一个Binary Classifier 假设我们要预测图片中的数字是否为数字5.如下面代码. X_train为训练集,每一个instance为一张28*28像素的图片,共784个features ...
- 系统滴答定时器(SysTick)中断配置
系统滴答定时器(SysTick)中断配置 在STM32标准库中是通过SysTick_Config()函数配置时钟中断的,然后SysTick_Handler()函数自动定时触发其中的函数. if(Sys ...
- 使用Promise链式调用解决多个异步回调的问题
使用Promise链式调用解决多个异步回调的问题 比如我们平常经常遇到的一种情况: 网站中需要先获取用户名,然后再根据用户名去获取用户信息.这里获取用户名getUserName()和获取用户信息get ...
- 最全NB-IoT/eMTC物联网解决方案名录汇总
NB-IoT/eMTC等蜂窝物联网技术的成熟和商用,占据低功耗广域网络(LPWAN)的主流地位,推动全球物联网新一轮发展热潮,越来越多的行业开始采用物联网方案来解决解决实际问题.实现落地应用,越来越多 ...
- XDA-University: Getting Started
XDA-University: Getting Started A while back, we introduced XDA-University to the world, an ongoing ...
- 项目UML设计(团队)
[团队信息] 团队项目: 小葵日记--主打记录与分享模式的日记app 队名:日不落战队 队员信息及贡献分比例: 短学号 名 本次作业博客链接 此次作业任务 贡献分配 备注 501 安琪 http:// ...
- iOS- 无处不在,详解iOS集成第三方登录(SSO授权登录<无需密码>)
1.前言 不多说,第三登录无处不在!必备技能,今天以新浪微博为例. 这是上次写的iOS第三方社交分享:http://www.cnblogs.com/qingche/p/3727559.html 可 ...
- lol人物模型提取(五)
修改了发过去后,那边说吊坠的绳子太细了,厚度至少1mm,推荐是2mm,需要我自己加粗,没办法又得用3ds max一根一根线地缩放了. 修改好后问报价,高精度树脂打印需要730元,还不带上色的, ...
- ZOJ 1229 M-Gift?!
https://vjudge.net/contest/67836#problem/M There is a beautiful river in a small village. N rocks ar ...