并查集
穷源溯流
路很长,尽管走便是。
展开
-
HDU 1213 How Many Tables(并查集模板)
过生日邀请了 n 位朋友,这些朋友中 m 对相互认识,相互认识的可以做同一张桌子,但桌子上必须有一个人认识才可以坐这张桌子,输出小明至少需要摆多少张桌子 const int N=2e5+5; int n,m,t; int i,j,k; int a[N]; int fa[N]; void init() { for(int i=0;i<=n;i++) fa[i]=i; } int Find(int x) { if(x!=fa[x]){ ...原创 2020-07-13 22:25:41 · 163 阅读 · 0 评论 -
HDU 3038 How Many Answers Are Wrong(带权值的并查集)
有 n 个结点的树,m 次提问,每次三个数字表示:区间 [a,b] 的和为 w,如果与之前的数据发生矛盾,则这次所说的为废话,问有多少句废话 详解看注释: const int N=2e5+5; int n,m,t; int i,j,k; int a[N]; int fa[N],sum[N];//sum[i] 表示 i 到根节点上的距离 void init() { for(int i=0;i<=n;i++) fa[i]=i,sum[...原创 2020-07-13 22:15:09 · 182 阅读 · 0 评论 -
HDU 5441 Travel
有一张含 n 个点 m 条边的无向图,每条边都有边权,有 q 次查询,每次查询一个值 val,如果从 a 点到 b 点路径上所有边的边权都不大于 val 那么这个点合法,求有多少合法点 const int N=5e3+5; int n,m,t; int i,j,k; int fa[N*4],num[N*4]; void init(){ for(int i=0;i<=n;i++) fa[i]=i,num[i]=1; } int Find(int x){ return x...原创 2020-07-12 23:52:49 · 166 阅读 · 0 评论 -
HDU 5606 tree
有一个树n 个点, n-1 条边 , 点标号从1~n , 树的边权是 0 或 1 . 求离每个点距离为 0 点个数 const int N=2e5+5; int n,m,t; int i,j,k; int a[N][2]; int fa[N],num[N]; void init(){ for(int i=0;i<=n;i++) fa[i]=i,num[i]=1;//自己也算 } int Find(int x){ return x==fa[x]? x: fa[x...原创 2020-07-12 22:37:11 · 208 阅读 · 0 评论 -
HDU 5631 Rikka with Graph
有 n 个点,n+1 条边,问可以删除几条边使其构成一个环,问构成环的方案数 利用环的性质,最少要 n-1 条边,枚举删除 1/2 条边的情况,再判断是否为环即可 const int N=100+5; int n,m,t; int i,j,k; int a[N][2]; int fa[N]; void init(){ for(int i=0;i<=n;i++) fa[i]=i; } int Find(int x){ return x==fa[x]? x: fa...原创 2020-07-12 21:53:50 · 92 阅读 · 0 评论 -
F. Asya And Kittens(List+并查集)
有 n 只猫,原来分别在一个笼子里,但是相邻的猫想一起玩就将它们放在一个笼子里,但是现在它们凑成了一堆,问他们原来在几号笼子里 const int N=15*1e4+5; int n,m,t; int i,j,k; int fa[N]; list<int> l[N]; int Find(int x) { return fa[x]==x? x: fa[x]=Find(fa[x]); } int main() { IOS; wh...原创 2020-07-12 16:36:00 · 208 阅读 · 0 评论 -
Codeforces Round #595 (Div. 3)
Yet Another Dividing into Teams 给出 n 互不相同的数,如果 | a[i]-a[j] |==1,那么他们不能再同一组,问最少分几组 int n,m,t; int i,j,k; int a[101]; int main() { IOS; rush(){ cin>>n; for(i=1;i<=n;i++) cin>>a[i]; sort(a+..原创 2020-07-11 16:15:46 · 222 阅读 · 0 评论 -
D. Secret Passwords(字符串并查集)
如果两字符串有相同的字母,那么他们相等; 如果这两个字符串和第三个字符串相等,那么这两个字符串也相等 int n,m,t; int i,j,k; bool vis[30]; int fa[30]; int Find(int son){ return fa[son]==son ? fa[son] : fa[son]=Find(fa[son]) ; } void Union(int x,int y){ x = Find(x); y = Find(y); ...原创 2020-06-23 09:55:37 · 335 阅读 · 0 评论 -
1347:格子游戏
【题目描述】 Alice和Bob玩了一个古老的游戏:首先画一个n × n的点阵(下图n = 3) 接着,他们两个轮流在相邻的点之间画上红边和蓝边: 直到围成一个封闭的圈(面积不必为1)为止,“封圈”的那个人就是赢家。因为棋盘实在是太大了(n ≤ 200),他们的游戏实在是太长了!他们甚至在游戏中都不知道谁赢得了游戏。于是请你写一个程序,帮助他们计算他们是否...原创 2020-04-23 12:09:42 · 380 阅读 · 0 评论 -
1389:亲戚
【题目描述】 若某个家族人员过于庞大,要判断两个是否是亲戚,确实还很不容易,现在给出某个亲戚关系图,求任意给出的某个人所在家族的人数。 规定:x和y是亲戚,y和z是亲戚,那么x和z也是亲戚。如果x,y是亲戚,那么x的亲戚都是y的亲戚,y的亲戚也都是x的亲戚。 【输入】 第一行:三个整数n,(n≤100,000,m≤200,000),分别表示有n个人,m个信息...原创 2020-04-23 10:59:43 · 393 阅读 · 0 评论 -
1390:食物链【NOI2001】
【题目描述】 动物王国中有三类动物A,B,C,这三类动物的食物链构成了有趣的环形。A吃B, B吃C,C吃A。 现有N个动物,以1-N编号。每个动物都是A,B,C中的一种,但是我们并不知道它到底是哪一种。 有人用两种说法对这N个动物所构成的食物链关系进行描述: 第一种说法是"1 X Y",表示X和Y是同类。 第二种说法是"2 X Y",表示X吃Y。 ...原创 2020-04-23 10:22:45 · 506 阅读 · 0 评论 -
1385:团伙(group)
【题目描述】 在某城市里住着n个人,任何两个认识的人不是朋友就是敌人,而且满足: 1、我朋友的朋友是我的朋友; 2、我敌人的敌人是我的朋友; 所有是朋友的人组成一个团伙。告诉你关于这n个人的m条信息,即某两个人是朋友,或者某两个人是敌人,请你编写一个程序,计算出这个城市最多可能有多少个团伙? 【输入】 第1行为n和m,1<n<10...原创 2020-04-21 22:37:43 · 851 阅读 · 0 评论 -
1387:搭配购买(buy)
【题目描述】 Joe觉得云朵很美,决定去山上的商店买一些云朵。商店里有n朵云,云朵被编号为1,2,…,n,并且每朵云都有一个价值。但是商店老板跟他说,一些云朵要搭配来买才好,所以买一朵云则与这朵云有搭配的云都要买。 但是Joe的钱有限,所以他希望买的价值越多越好。 【输入】 第1行n,m,w,表示n朵云,m个搭配,Joe有w的钱。 第2~n+1行,每...原创 2020-04-20 21:19:11 · 564 阅读 · 0 评论 -
1388:家谱(gen)
【题目描述】 现代的人对于本家族血统越来越感兴趣,现在给出充足的父子关系,请你编写程序找到某个人的最早的祖先。 【输入】 由多行组成,首先是一系列有关父子关系的描述,其中每一组父子关系由二行组成,用#name的形式描写一组父子关系中的父亲的名字,用+name的形式描写一组父子关系中的儿子的名字;接下来用?name的形式表示要求该人的最早的祖先;最后用单独的一个...原创 2020-04-20 19:36:23 · 721 阅读 · 0 评论 -
1346:亲戚(relation)
【题目描述】 或许你并不知道,你的某个朋友是你的亲戚。他可能是你的曾祖父的外公的女婿的外甥女的表姐的孙子。如果能得到完整的家谱,判断两个人是否是亲戚应该是可行的,但如果两个人的最近公共祖先与他们相隔好几代,使得家谱十分庞大,那么检验亲戚关系实非人力所能及。在这种情况下,最好的帮手就是计算机。为了将问题简化,你将得到一些亲戚关系的信息,如Marry和Tom是亲戚,Tom和Ben是亲戚...原创 2020-04-20 19:07:02 · 393 阅读 · 0 评论