【题目链接】

ybt 1386:打击犯罪(black)

【题目考点】

1. 并查集

【解题思路】

这是个无向图。每个犯罪团伙是一个顶点,犯罪团伙之间的联系是边,每个犯罪集团是一个连通分量。
以下描述中,连通分量就对应了并查集中集合的概念。
“犯罪团伙的危险程度”是连通分量中的顶点数。“最大的犯罪团伙的危险程度不超过n/2”,即为顶点数量最多的连通分量的顶点数量小于等于n/2。
按顺序打击团伙,相当于删掉当前图中的顶点,而后统计图中每个连通分量的顶点数量,这一过程过于繁琐。
题目中说只能按顺序打掉1到k的团伙,也就是按顺序删掉顶点1到k。此处可以进行逆向思维:删掉顶点1到k,相当于保留顶点k+1到n。
从一个空白的图开始,从顶点n到顶点1取每个顶点加入到图之中,针对每个顶点与图中已有顶点之间的边,进行合并操作。合并后只有该顶点所在的连通分量的数量发生了变化,因此只需要判断该连通分量中的顶点数是否大于n/2。

  • 新增顶点n,判断n所在的连通分量顶点数量是否大于n/2。
  • 新增顶点n-1,如果顶点n-1与顶点n之间有边,执行合并操作,判断n-1所在的连通分量顶点数量是否大于n/2。
  • 新增顶点n-2,如果顶点n-2与顶点n-1到n之间有边,针对每条边执行合并操作,判断n-2所在的连通分量顶点数量是否大于n/2。
    。。。
  • 一般情况下,新增顶点k,如果顶点k与顶点k+1到n之间有边,针对每条边进行合并操作,判断k所在的连通分量顶点数量是否大于n/2。
    如果k所在的连通分量顶点数量大于n/2,那么不应该把k作为保留在图中的顶点,应该删掉顶点1到k。也就是应该打掉团伙1到k,此时k的值就是该问题的结果。

【题解代码】

#include <bits/stdc++.h>
using namespace std;
#define N 1005
int fa[N], ct[N], n;//ct[i]:以i为根结点的集合的顶点数
vector<int> edge[N];
void initFa(int n)
{for(int i = 1; i <= n; ++i){fa[i] = i;ct[i] = 1;}
}
int find(int x)
{if(fa[x] == x)return x;elsereturn fa[x] = find(fa[x]);
}
void merge(int i, int j)
{int x = find(i), y = find(j);if(x != y){ct[y] += ct[x];fa[x] = y;}
}
int main()
{int m, t;cin >> n;for(int f = 1; f <= n; ++f){cin >> m;for(int i = 1; i <= m; ++i){cin >> t;edge[f].push_back(t);//edge[f];保存f的邻接点,f和t有联系。 }}initFa(n);for(int k = n; k >= 1; --k){for(int v : edge[k])if(v > k)//只取大于k的顶点merge(k, v);//与k进行合并 if(ct[find(k)] > n/2)//如果合并后k所在的连通分量(集合)顶点数大于n/2 {cout << k;//应该删除1~k return 0;} }return 0;
}

信息学奥赛一本通 1386:打击犯罪(black)相关推荐

  1. #并查集#SSL 2342 信息学奥赛一本通 1386 打击犯罪

    信息学奥赛一本通链接 题目 求最少打击的团伙数,并且使最大的团伙危险程度不超过n/2. 分析 从nnn到111逆向枚举,每次把点kkk加入图中,也就是删掉1∼k−11\sim k-11∼k−1,剩余k ...

  2. 信息学奥赛一本通(基础算法与数据结构-题解汇总目录)

    信息学奥赛一本通(C++版)在线评测系统 基础(二)基础算法   更新中...... 第一章高精度计算 1307[例1.3]高精度乘法 1308[例1.5]高精除 1309[例1.6]回文数(Noip ...

  3. 信息学奥赛一本通 (C++)上机练习

    信息学奥赛一本通(C++)上机练习 此书为娃儿的第一本刷题书.娃儿现在四年级 ,希望他能坚持下来.特开贴加油 luogu: disangan223 第一部分 C++语言 第一章 C++语言入门 T10 ...

  4. 信息学奥赛一本通_长乐一中老师演绎“奥赛传奇”

    董永建(右一)在课堂上. 台海网5月14日讯 据福州晚报报道,长乐一中有一位"传奇"老师--15年来,他辅导的学生在全国高中生信息学奥赛中获金牌3人次.银牌3人次.铜牌5人次:在全 ...

  5. 信息学奥赛一本通 提高篇 第5章 矩阵乘法

    例1 矩阵AXB 信息学奥赛一本通(C++版)在线评测系统 [矩阵乘法]矩阵A×B_Uletay-CSDN博客 矩阵乘法--矩阵A×B_vina的博客-CSDN博客 一本通1641[例 1]矩阵 A× ...

  6. 《信息学奥赛一本通提高篇》第6章 组合数学

    例1 计算系数(NOIP2011提高) 信息学奥赛一本通(C++版)在线评测系统 NOIP2011计算系数_nanhan27的博客-CSDN博客 「NOIP2011」 计算系数 - 组合数_TbYan ...

  7. 《信息学奥赛一本通 提高篇》

    提高篇 第一部分 基础算法 第1章 贪心算法 提高篇 第一部分 基础算法 第1章 贪心算法_青少年趣味编程-CSDN博客 提高篇 第一部分 基础算法 第1章 贪心算法 提高篇 第一部分 基础算法 第1 ...

  8. 信息学奥赛一本通 提高篇 第一部分 基础算法 第2章 二分与三分

    信息学奥赛一本通 提高篇 提高版 第一部分 基础算法 第2章 二分与三分 信息学奥赛一本通 提高篇 提高版 第一部分 基础算法 第2章 二分与三分_mrcrack的博客-CSDN博客_信息学奥赛一本通 ...

  9. 信息学奥赛一本通 提高篇 第六部分 数学基础 相关的真题

    第1章   快速幂 1875:[13NOIP提高组]转圈游戏 信息学奥赛一本通(C++版)在线评测系统 第2 章  素数 第 3 章  约数 第 4 章  同余问题 第 5 章  矩阵乘法 第 6 章 ...

最新文章

  1. 用PHP计算个税,PHP计算个人所得税示例【不使用速算扣除数】
  2. mono和monodevelop源码编译安装
  3. 塔勒布: 2019-nCoV的系统风险:一份笔记
  4. 为什么要那么大的房子和那么大的储存空间呢?
  5. oracle的OCI目录下没有samples包的解决方案
  6. 两点间最短路 java_AcWing 850. Dijkstra求最短路 II_Java实现含详细注释
  7. python做炫酷的界面_用python打造可视化爬虫监控系统,酷炫的图形化界面
  8. php小猫咪图床源码V1.8
  9. flask异步操作_从Flask到FastAPI的平滑迁移
  10. Go 类型转换、类型断言与类型选择
  11. Linux 僵尸进程查杀
  12. android平板电脑 刷机工具,安卓平板电脑刷机教程之一键刷机.pdf
  13. Jenkins(二)之自定义Robot Framework结果报告
  14. 《OpenGL编程指南(原书第9版)》——2.8 SPIR-V
  15. 《数字信号处理》正弦信号的波形及频谱的求解
  16. JETT(三)-多Sheet渲染
  17. centos8安装中文版man帮助手册
  18. android开发指纹解锁,Android-指纹解锁技术
  19. IDEA引入WebService接口
  20. 【MVC】MVC分页

热门文章

  1. ITK4.12+VS2015配置详解
  2. 操作系统的另类安装---如何抛开光盘安装系统
  3. 五、原码、反码和补码
  4. 用于图像降噪的卷积自编码器
  5. Windows 11正式发布,新功能太绝了!
  6. linux系统不能用投影仪,Linux连接投影仪(ubuntu)失败或显示不正常
  7. [ Oracle EBS ] 资产 摊销调整、累计折旧等介绍
  8. Typescript+Vue大型后台管理系统实战
  9. 华为OD机试 - 德州扑克(Java JS Python)
  10. 抖音号永久封禁了怎么解封