【并查集】打击犯罪(ssl 2342)
打击犯罪
ssl 2342
题目大意:
有n个人某些人之间有连接(连接成一个团伙),现在要最大的团伙人数不大于n/2,要最少要删掉几个人(要按顺序删)
原题:
题目描述:
某个地区有n(n<=1000)个犯罪团伙,当地警方按照他们的危险程度由高到低给他们编号为1-n,他们有些团伙之间有直接联系,但是任意两个团伙都可以通过直接或间接的方式联系,这样这里就形成了一个庞大的犯罪集团,犯罪集团的危险程度唯一由集团内的犯罪团伙数量确定,而与单个犯罪团伙的危险程度无关(该犯罪集团的危险程度为n)。现在当地警方希望花尽量少的时间(即打击掉尽量少的团伙),使得庞大的犯罪集团分离成若干个较小的集团,并且他们中最大的一个的危险程度不超过n/2。为达到最好的效果,他们将按顺序打击掉编号1到k的犯罪团伙,请编程求出k的最小值。
输入
第一行一个正整数n
接下来的n行每行有若干个正整数,第一个整数表示该行除第一个外还有多少个整数,若第i行存在正整数k,表示i,k两个团伙可以直接联系
输出
一个正整数,为k的最小值
输入样例
7
2 2 5
3 1 3 4
2 2 4
2 2 3
3 1 6 7
2 5 7
2 5 6
输出样例
1
解题思路:
因为是按顺序打击的,所以倒着循环,每次添加一个人,如果没超过那继续,如果超过了就直接输出
代码:
#include<cstdio>
using namespace std;
int n,x,y,pp,p[1005],dad[1005],s[1005],b[1005][1005];
int find(int dep){return dad[dep]==dep?dep:dad[dep]=find(dad[dep]);} //并查集
int main()
{scanf("%d",&n);for (int i=1;i<=n;++i){scanf("%d",&b[i][0]);for (int j=1;j<=b[i][0];++j)scanf("%d",&b[i][j]);s[i]=1;//预处理dad[i]=i;}for (int i=n;i>0;--i){p[i]=1;for (int j=1;j<=b[i][0];++j)//合并其他的if (find(i)!=find(b[i][j])&&p[b[i][j]]){x=find(i);y=find(b[i][j]);if (x>y){dad[y]=x;s[x]+=s[y]; //累加}else{dad[x]=y;s[y]+=s[x];}}for (int j=i;j<=n;++j)if (s[j]>n/2)//判断符不符合{printf("%d",i);pp=1;break;}if (pp) break;}
}
【并查集】打击犯罪(ssl 2342)相关推荐
- 1386:打击犯罪(并查集)
[题目描述] 某个地区有n(n≤1000)个犯罪团伙,当地警方按照他们的危险程度由高到低给他们编号为1-n,他们有些团伙之间有直接联系,但是任意两个团伙都可以通过直接或间接的方式联系,这样这里就形成了 ...
- BZOJ 2342 [Shoi2011]双倍回文(manacher+并查集)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=2342 [题目大意] 记Wr为W串的倒置,求最长的形如WWrWWr的串的长度. [题解] ...
- 【并查集】银河英雄传说 (luogu 1196/ssl 1225)
银河英雄传说 luogu 1196 ssl 1225 题目大意: 有n列船,每列一开始有一艘船,可以将某一艘船所在的列所有船接到另外一列,然后会问某两艘船是否在一列,如果在那中间有多少艘船 原题: 题 ...
- 【并查集】家谱(luogu 2814/ssl 2343)
家谱 luogu 2814 ssl 2343 题目大意: 给一堆父子关系,求出一些人的最大的祖先 原题: 题目背景 现代的人对于本家族血统越来越感兴趣. 题目描述 给出充足的父子关系,请你编写程序找到 ...
- 【图论】【并查集】矩形(ssl 1222)
矩形 ssl 1222 题目大意: 有n个矩阵,现在将有重叠部分的两个矩阵合并成一个图形,问有多少个图形 原题: 题目描述 在一个平面上有n个矩形.每个矩形的边都平行于坐标轴并且都具有值为整数的顶点. ...
- 【并查集】【图论】【最小生成树】剑鱼行动(ssl 1618)
剑鱼行动 ssl 1618 题目大意: 求一个平面直角坐标系中的最小生成树 原题: 题目描述 给出N个点的坐标,对它们建立一个最小生成树,代价就是连接它们的路径的长度,现要求总长度最小.N的值在100 ...
- 【并查集】家族 (ssl 1896)
家族 ssl 1896 题目大意: 合并一些集合,然后判断某两个点是否在同一个集合内 原题: 题目描述 若某个家族人员过于庞大,要判断两个是否是亲戚,确实还很不容易,现在给出某个亲戚关系图,求任意给出 ...
- [最短路-Floyd][并查集]SSL P2344 刻录光盘
Description 在PJOI2010夏令营快要结束的时候,很多营员提出来要把整个夏令营期间的资料刻录成一张光盘给大家,以便大家回去后继续学习.组委会觉得这个主意不错!可是组委会一时没有足够的空光 ...
- 树形结构 —— 并查集
[概述] 并查集(Union-Find Set)是一种用于分离集合操作的抽象数据类型,其处理的是集合(set)之间的关系,一般处理的是图的连通分量,当给出两个的元素的一个无序对 (a,b) 时,需要快 ...
最新文章
- 电击、警棍、爆头,被骗去柬埔寨的程序员有多惨?
- HBase眼高手低从Shell到IDEA编程、心路笔记、踩坑过程
- python使用符号 表示单行注释-Python编程规范之注释
- Linux / pthread_create() 函数所使用的线程函数为什么必须是静态函数?
- 前端项目 开发者环境 和 正式环境 区别
- _declspec(naked) 使用
- 向maven中添加Oracle数据库的驱动,有效!
- Mac网易云音乐ncm格式转mp3
- 微信僵尸粉删除工具 WeTool v4.0.7.0 免费版
- TensorFlow Serving架构分析
- Excel PivotTable 使用心得手顺分享(一)
- 贾扬清担任阿里开源技术委员会负责人,开源升级为阿里技术战略之一
- Qt的各版本直接下载地址
- vue动态配置嵌套页面(含iframe嵌套)可实现白天夜间皮肤切换
- 【微机原理与接口技术】
- Java 实现分页功能
- Oracle的定时任务
- 关于显著性检验,有你想要的!
- 关于获取当前时间出现1970年问题的解决
- 小白前端自制红警登陆界面(试水前端)
热门文章
- linux获取tomcat进程,Shell 获取Tomcat进程号
- python实用脚本 知乎_停课不停学|38 个免费 Python 项目合集,从小白到老司机!...
- silklabo哪个公众号有资源_微小说免费渣渣团资源公众号看大全集
- css伪类元素加在元素前,CSS伪类:before在元素之前 :after 在元素之后实例讲解
- json.net java_java解析JSON (使用net.sf.json)
- java当中递归打印目录树
- linux启动mqtt_linux下安装MQTT服务器 - EMQTT
- 自适应滤波器在matlab仿真的程序_电气信息类专业课程之matlab系统仿真 第五章 BPSK通信系统(3)...
- 7-10 逆波兰表达式求值 (20 分)(c语言)(数据结构)
- xorg.conf变更导致开机无法显示