题目链接


题解

算法

  • 一个经典的并查集
  • 但是需要用一点贪心的思想

做法

  • 先将给的冲突们按冲突值从大到小进行排序(这很显然)
  • 然后一个一个的遍历它们
  • 如果发现其中的一个冲突里的两个人在同一个集合里,直接输出当时的冲突值
  • 否则,第一个人不妨设其为\(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 关押罪犯】的更多相关文章

  1. NOIP提高组2010 关押罪犯

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

  2. noip提高组 2010 关押罪犯 (洛谷1525)

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

  3. noip 提高组 2010

    T1:机器翻译 题目背景 小晨的电脑上安装了一个机器翻译软件,他经常用这个软件来翻译英语文章. 题目描述 这个翻译软件的原理很简单,它只是从头到尾,依次将每个英文单词用对应的中文含义来替换.对于每个英 ...

  4. 题解 【luogu P1541 NOIp提高组2010 乌龟棋】

    题目链接 题解 题意: 有一些格子,每个格子有一定分数. 给你四种卡片,每次可以使用卡片来前进1或2或3或4个格子并拾取格子上的分数 每张卡片有数量限制.求最大分数. 分析 设\(dp[i]\)为第前 ...

  5. 2010提高组-C]关押罪犯(扩展域并查集

    题:https://www.cometoj.com/problem/0073 #include<bits/stdc++.h> using namespace std; ; struct n ...

  6. NOIP提高组2010 乌龟棋

    小明过生日的时候,爸爸送给他一副乌龟棋当作礼物. 乌龟棋的棋盘是一行N个格子,每个格子上一个分数(非负整数).棋盘第1格是唯一的起点,第N格是终点,游戏要求玩家控制一个乌龟棋子从起点出发走到终点. 乌 ...

  7. NOIP提高组2004 合并果子题解

    NOIP提高组2004 合并果子题解 描述:在一个果园里,多多已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆.多多决定把所有的果子合成一堆. 每一次合并,多多可以把两堆果子合并到一起,消 ...

  8. [NOIP提高组2018]货币系统

    [TOC] 题目名称:货币系统 来源:2018年NOIP提高组 链接 博客链接 CSDN 洛谷博客 洛谷题解 题目链接 LibreOJ(2951) 洛谷(P5020) 大视野在线评测(1425) 题目 ...

  9. 津津的储蓄计划 NOIp提高组2004

    这个题目当年困扰了我许久,现在来反思一下 本文为博客园ShyButHandsome的原创作品,转载请注明出处 右边有目录,方便快速浏览 题目描述 津津的零花钱一直都是自己管理.每个月的月初妈妈给津津\ ...

随机推荐

  1. 树的层次遍历(Trees on the level,UVA 122)

    题目描述: 题目思路: 1.用结构链表来建树 2.用队列来实现层次遍历,当遍历到根节点时,将其子节点压入队列 #include <iostream> #include <cstdli ...

  2. 关于wcf服务编译平台是x86, 运行平台是x64时,如何调试

    关于调试CTDC项目中的的 wcf服务时注意事项: 因为wcf项目引用的的 x86的程序集,所以wcf生成的目标平台为x86.故在64系统上调试需要执行下面的脚本 具体操作步骤: 1. 必须使用201 ...

  3. C#程序 权限不够的解决方案

    有时候需要操作硬件,或者启动windows服务程序时,系统会提示很多奇怪的问题,归根结底就是程序当前所拥有的权限不够,需要提升,以前我们时手写一个manifest,多不容易啊, 现在有正常的方法了 1 ...

  4. mysql mariadb 密码设置

    原文:https://my.oschina.net/uyunsky/blog/109532 一.初始安装 Method 1:在/usr/local/mysql/bin/下:./mysqladmin - ...

  5. Python中的namespace package

    在Python 3.3之前,一个目录想被当成package被导入,必须包含__init__.py文件:而在Python 3.3及以后的版本中,__init__.py文件可以不需要,直接使用import ...

  6. 定点数(fixed-point number)

    定义 定点数(fixed-point number)就是小数点位置固定的数,也就是说,小数点后面的位数是固定的,比如要记录一笔账目,这些账目的数字都不会超过100,就可以使用2位小数位定点数来记录,比 ...

  7. 欢迎来怼——第14次Scrum会议(10/26)

    一.小组信息 队名:欢迎来怼小组成员队长:田继平成员:李圆圆,葛美义,王伟东,姜珊,邵朔,冉华 小组照片 二.开会信息 时间:2017/10/26  17:00~17:13(总计13min).地点:计 ...

  8. Notes of the scrum meeting before publishing(12.17)

    meeting time:18:30~20:30p.m.,December 17th,2013 meeting place:3号公寓一层 attendees: 顾育豪                  ...

  9. AndroidUI设计之 布局管理器 - 详细解析布局实现

    写完博客的总结 : 以前没有弄清楚的概念清晰化 父容器与本容器属性 : android_layout...属性是本容器的属性, 定义在这个布局管理器的LayoutParams内部类中, 每个布局管理器 ...

  10. ASP.NET 最全的POST提交数据和接收数据 —— (1) 用url传参方式

    //1.对象提交,字典方式 //接口方:public ActionResult GetArry(Car model) public void PostResponse() { HttpWebReque ...