并查集基础 真的很基础

题目描述:Description

某个地区有n(n<=1000)个犯罪团伙,当地警方按照他们的危险程度由高到低给他们编号为1-n,他们有些团伙之间有直接联系,但是任意两个团伙都可以通过直接或间接的方式联系,这样这里就形成了一个庞大的犯罪集团,犯罪集团的危险程度唯一由集团内的犯罪团伙数量确定,而与单个犯罪团伙的危险程度无关(该犯罪集团的危险程度为n)。现在当地警方希望花尽量少的时间(即打击掉尽量少的团伙),使得庞大的犯罪集团分离成若干个较小的集团,并且他们中最大的一个的危险程度不超过n/2。为达到最好的效果,他们将按顺序打击掉编号1到k的犯罪团伙,请编程求出k的最小值。

Input Format

第一行一个正整数n。接下来的n行每行有若干个正整数,第一个整数表示该行除第一个外还有多少个整数,若第i行存在正整数k,表示i,k两个团伙可以直接联系。

Output Format

一个正整数,为k的最小值

Sample

样例输入

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

题目分析:

由题可知,我们需要打击1~k个犯罪团伙,来让其最大的总数不超过n/2(n<<1)。

1.如果我们正向遍历并查集的话,就需要在并查集内删点,这个操作对并查集并不是很友好。所以可以考虑另外一种方法。

2.既然要打击1~k的罪犯,我们不如从第n个团伙开始建立集合,每次加边时判断一下是否满足(<=n/2),直到不能满足题意为止。

AC code:

#include<bits/stdc++.h>
using namespace std;
#define s(n) scanf("%d",&n)
int n,m,a[1010][1010],z,ans,dgr[1010]={1},lst=0,mx,f[1010];
bool fg[1010]={0};
inline bool check(){
int ch = 0;
for(int z=1; z<=n; z++){
ch = max(dgr[z],ch);
}
if(ch <= n/2) return true;
return false;
}
inline int ff(int k){
if(f[k] == k) return k;
else return ff(f[k]);
}
int main(){
for(int i=0; i<1010; i++) dgr[i] = 1, f[i] = i;
s(n);
for(int i=1; i<=n; i++){
s(m);
fg[i] = 1;
int cnt = 1;
for(int j=1; j<=m; j++){
s(z);
a[i][cnt++] = z;
}
}
for(int i=n; i>=1; i--){
for(int j=1; a[i][j]; j++){
if(a[i][j] > i){
int fi = ff(i), fa = ff(a[i][j]);
if(fi != fa){
dgr[fi] += dgr[fa];
f[fa] = fi;
if(!check()){
printf("%d",i);
return 0;
}
}
}
}
}
return 0;
}

并查集基础 &打击罪犯的更多相关文章

  1. 【并查集】关押罪犯(BSOJ2809)

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

  2. 【HDU1232】畅通工程(并查集基础题)

    裸敲并查集,很水一次AC #include <iostream> #include <cstring> #include <cstdlib> #include &l ...

  3. 【HDU1856】More is better(并查集基础题)

    裸并查集,但有二坑: 1.需要路径压缩,不写的话会TLE 2.根据题目大意,如果0组男孩合作的话,应该最大的子集元素数目为1.所以res初始化为1即可. #include <iostream&g ...

  4. 【HDU1272】小希的迷宫(并查集基础题)

    仍旧裸敲并查集.有这两点注意: 1.输入 0 0 时候要输出YES 2.留心数组的初始化 #include <iostream> #include <cstring> #inc ...

  5. 【HDU1231】How Many Tables(并查集基础题)

    什么也不用说,并查集裸题,直接盲敲即可. #include <iostream> #include <cstring> #include <cstdlib> #in ...

  6. Codeforces Round #254 (Div. 2) DZY Loves Chemistry【并查集基础】

    一开始不知道题意是啥意思,迟放进去反应和后放进去反应有什么区别 对于第三组数据不是很懂,为啥312,132的组合是不行的 后来发现这是一道考察并查集的题目 QAQ 怒贴代码: #include < ...

  7. ZH奶酪:【数据结构与算法】并查集基础

    1.介绍 并查集是一种树型数据结构,用于处理一些不相交集合的合并问题. 并查集主要操作有: (1)合并两个不相交集合: (2)判断两个元素是否属于同一个集合: (3)路径压缩: 2.常用操作 用fat ...

  8. 并查集基础 模板题 hdu1232 畅通工程

    模板题 引入并查集——一则有趣的故事 为了解释并查集的原理,我将举一个更有趣的例子.话说江湖上散落着各式各样的大侠,有上千个之多.他们没有什么正当职业,整天背着剑在外面走来走去,碰到和自己不是一路人的 ...

  9. 【HDU2120】Ice_cream's world I(并查集基础题)

    查环操作,裸题.一次AC. #include <iostream> #include <cstring> #include <cstdlib> #include & ...

  10. 并查集 基础 AC 2014-01-14 13:37 202人阅读 评论(0) 收藏

    题目地址:http://haut.openjudge.cn/20131112/6/ 求编号最多的组 查看 提交 统计 提问 总时间限制:  1000ms  内存限制:  63353kB 描述 相邻两个 ...

随机推荐

  1. Numpy技巧: 由label获得相等矩阵

    Numpy技巧: 由label获得相等矩阵     假设Label为:  [ABAC] , 如何方便的得到一个矩阵, 其元素i,j表示第i位和第j位相等呢?   先把Label复制扩展成: m,m 的 ...

  2. js脚本化css

    脚本化CSS 我们刚讲过如何获取和设置行内样式的值,但是我们开发不会所有样式都写在行内,同时js没法获取内嵌样式表和外部样式表中的值. 事实上DOM提供了可靠的API,得到计算后的样式. 1. 获取计 ...

  3. GGTalk 开源即时通讯系统源码剖析之:聊天消息防错漏机制

    继上篇<GGTalk 开源即时通讯系统源码剖析之:客户端全局缓存及本地存储>GGTalk客户端的全局缓存以及客户端的本地持久化存储.接下来我们将介绍GGTalk的聊天消息防错漏机制. GG ...

  4. FSCTF 2023(公开赛道)WP

    FSCTF 2023 ID:Mar10 Rank:6 总结:下次看到不正常报错一定重新安装一遍工具~~ web 源码!启动! 就在源码注释里 <!-- 师傅们,欢迎来到CTF的世界~ NSSCT ...

  5. C++中的引用(Reference)

    1. 引用(Reference) 在 C++ 中,引用(Reference)是一个变量的别名. 它允许你通过不同的名字访问同一个变量. 与指针不同,引用在定义时必须被初始化,并且一旦绑定到某个变量,之 ...

  6. 引入样式在Element UI (Vue 2)和Element Plus (Vue 3)中的不同

    引入样式 Element UI (Vue 2):   import 'element-ui/lib/theme-chalk/index.css'; Element Plus (Vue 3):   im ...

  7. django 计算两个TimeField的时差

    在 Django 中,你可以使用 datetime 模块来计算两个 TimeField 字段的时间差.以下是一个示例: from datetime import datetime, timedelta ...

  8. [oeasy]python0004_游乐场_和python一起玩耍_python解释器_数学运算

    和python玩耍 Python 回忆 上次 了解shell环境中的命令 命令 作用 whoami 显示当前用户名 pwd 显示当前文件夹 ls 列出当前文件夹下的内容 python3 仿佛进入大于号 ...

  9. [oeasy]python0007-调试程序_debug

    ​ 调试程序 回忆上次内容 ​py​​ 的程序是按照顺序执行的 是一行行挨排解释执行的 程序并不是数量越多越好 kpi也在不断演化 ​ 编辑 写的代码越多 出现的bug就越多 什么是bug 如何找bu ...

  10. odoo 开发入门教程系列-基本视图

    在上一章中已经看到,odoo能够为给定模型生成默认视图.实际上,默认视图对于业务应用程序来说是不可接受的.相反,我们至少应该以逻辑的方式组织各个字段. 视图是在带有操作和菜单的XML文件中定义的.它们 ...