并查集
文章平均质量分 62
并查集
向上的yyy
路漫漫其修远兮,吾将上下而求索
展开
-
7-22 图中最深的根——并查集+dfs树深
一个连通的无环图可以看做是一棵树,但选定不同的结点作为根的话,树的结构会不同,树的高度也会不一样,现在需要你找到能形成最高树的根,也就是最深根。输入格式:首先在第一行给出结点的数目N,N小于10000,结点从1开始编号,随后N-1行,依次给出N-1条边。输出格式:对每一组输入,输出最深根的编号,如果有多个,则按从小到大的顺序输出,每行输出一个。如果不能构成树,则统计图有多少个连通块,输出“Error: K components”,其中K是连通块的数目。输入样例1:在这里给出一组输入。原创 2022-11-27 17:43:07 · 387 阅读 · 0 评论 -
P1536 村村通——并查集-连通块
某市调查城镇交通状况,得到现有城镇道路统计表。表中列出了每条道路直接连通的城镇。市政府 “村村通工程” 的目标是使全市任何两个城镇间都可以实现交通(但不一定有直接的道路相连,只要相互之间可达即可)。请你计算出最少还需要建设多少条道路?原创 2022-11-04 17:14:48 · 152 阅读 · 0 评论 -
P1955 [NOI2015] 程序自动分析——离散化、并查集
在实现程序自动分析的过程中,常常需要判定一些约束条件是否能被同时满足。考虑一个约束满足问题的简化版本:假设x1,x2,x3,⋯代表程序中出现的变量,给定n个形如xi=xj或xi=xj的变量相等/不等的约束条件,请判定是否可以分别为每一个变量赋予恰当的值,使得上述所有约束条件同时被满足。原创 2022-10-01 12:51:36 · 752 阅读 · 0 评论 -
1347:【例4-8】格子游戏——二维并查集
【题目描述】Alice和Bob玩了一个古老的游戏:首先画一个n × n的点阵(下图n = 3)接着,他们两个轮流在相邻的点之间画上红边和蓝边:直到围成一个封闭的圈(面积不必为1)为止,“封圈”的那个人就是赢家。因为棋盘实在是太大了(n ≤ 200),他们的游戏实在是太长了!他们甚至在游戏中都不知道谁赢得了游戏。于是请你写一个程序,帮助他们计算他们是否结束了游戏?【输入】输入数据第一行为两个整数n和m。m表示一共画了m条线。原创 2022-09-18 21:43:41 · 537 阅读 · 0 评论 -
1346:【例4-7】亲戚(relation)——并查集
【题目描述】或许你并不知道,你的某个朋友是你的亲戚。他可能是你的曾祖父的外公的女婿的外甥女的表姐的孙子。如果能得到完整的家谱,判断两个人是否是亲戚应该是可行的,但如果两个人的最近公共祖先与他们相隔好几代,使得家谱十分庞大,那么检验亲戚关系实非人力所能及。在这种情况下,最好的帮手就是计算机。为了将问题简化,你将得到一些亲戚关系的信息,如Marry和Tom是亲戚,Tom和Ben是亲戚,等等。从这些信息中,你可以推出Marry和Ben是亲戚。请写一个程序,对于我们的关于亲戚关系的提问,以最快的速度给出答案。原创 2022-09-17 21:59:43 · 178 阅读 · 0 评论 -
L2-024 部落 c++ 并查集
分析 并查集的使用:https://blog.csdn.net/weixin_51995229/article/details/124313167?spm=1001.2014.3001.5501 此题需要求所有部落的人数,那么用一个set集合去放所有的人即可,在初始化f数组时,我们不知道总人数的个数,可以直接初始化到最大值; 求不相交的部落的个数,就是连通分量数,以及两个人是否有关系,可以参考这个题的分析:https://blog.csdn.net/weixin_51995229/article/de..原创 2022-04-26 18:28:10 · 1073 阅读 · 0 评论 -
L2-010 排座位 (25 分) c++ 并查集
分析 二维数组表示,会有测试点过不去 二维数组去表示他们的关系,在判断:x和y这两个人时,如果他们之间有敌对,然而也有共同的朋友,这个地方的时候,我们可以去找所有和x、y两个点有关系的人,通过一层循环,当某个人j同时满足和x存在盆友关系,满足条件; 第二个测试点过不去,因为会出现,朋友的朋友也是朋友,所以这样写有bug,所以可以考虑并查集; #include <bits/stdc++.h> using namespace std; int a[105][105]; int main(..原创 2022-04-22 20:52:14 · 899 阅读 · 2 评论 -
L2-013 红色警报 (25 分) c++ 并查集 连通分量数
【代码】L2-013 红色警报 (25 分) c++ 并查集 连通分量数。原创 2022-04-22 13:40:06 · 1000 阅读 · 0 评论 -
7-25 朋友圈 (25 分) java 并查集
分析 此题就是并查集,就是根据祖先的(俱乐部)不同,分成了许多小集合,每个小集合可以理解为一个俱乐部,用cnt数组去记录每个集合的孩子数量,找出cnt中某个位置的值最大,那么俱乐部的最大人数就求出来了; 需要注意和上一题的模板题:亲戚,稍微有点变化,此题需要依次合并多个人的关系,上题是一对一对的合并,而这一题,一行多个结点属于一个关系,比如1,2,3为同一集合,那么我们可以直接把1和2连通起来,再把把1和3连通起来,就可以让这一行的关系都连了起来; 在处理哪个部落的人最多是多少的问题,我们知道并查集是根.原创 2022-04-21 17:55:00 · 606 阅读 · 0 评论 -
P1551 亲戚 java 并查集
分析 此题为并查集的模板题; 关于并查集的分析可见:https://blog.csdn.net/weixin_51995229/article/details/124313167 import java.util.Scanner; public class Main { //f[2]=1:说明2的祖先是1 static int[] f = new int[5000 + 5]; public static void main(String[] args) { S.原创 2022-04-21 14:35:22 · 253 阅读 · 0 评论 -
图论——并查集
并查集 分析 推荐视频:https://www.bilibili.com/video/BV1jv411a7LK?p=2 推荐的博客:https://blog.csdn.net/the_ZED/article/details/105126583?utm_source=app&app_version=5.3.1&code=app_1562916241&uLinkId=usr1mkqgl919blen 我们用一个数组f去建立关系,可以理解为保存前驱结点,f[2]=1:说明2的祖先是1原创 2022-04-21 14:28:44 · 446 阅读 · 0 评论