并查集
文章平均质量分 67
柃歌
夏天的海边有冰淇淋口味的海风
展开
-
AcWing 1977. 信息中继(基环树,并查集)
【题目描述】农夫约翰有NNN头奶牛,编号1∼N1\sim N1∼N。通过使用易拉罐和绳子构成的土制电话,它们会在约翰不注意的时候相互通信。每头奶牛最多可以将消息转发给另一头奶牛:对于奶牛iii,它会将自己收到的任何信息转发给奶牛FiF_iFi(FiF_iFi与iii一定不同)。如果FiF_iFi为000,则奶牛iii不转发消息。不幸的是,奶牛们意识到来自某些奶牛的消息可能最终陷入循环之中,不断地被转发。请确定所有奶牛中有多少只奶牛发出的消息不会永远陷入循环之中。【输入格式】第一行包含整原创 2022-06-12 18:24:17 · 240 阅读 · 0 评论 -
洛谷P1892 团伙(并查集,扩展域)
【题目描述】现在有nnn个人,他们之间有两种关系:朋友和敌人。我们知道:一个人的朋友的朋友是朋友一个人的敌人的敌人是朋友现在要对这些人进行组团。两个人在一个团体内当且仅当这两个人是朋友。请求出这些人中最多可能有的团体数。【输入格式】第一行输入一个整数nnn代表人数。第二行输入一个整数mmm表示接下来要列出mmm个关系。接下来mmm行,每行一个字符optoptopt和两个整数p,qp,qp,q,分别代表关系(朋友或敌人),有关系的两个人之中的第一个人和第二个人。其中optoptopt有两种原创 2022-03-10 09:25:15 · 421 阅读 · 0 评论 -
【CF1638C】Inversion Graph(连通块,思维题)
【题目描述】现在有一个序列p1,p2,…,pnp_1,p_2,\dots ,p_np1,p2,…,pn,你需要构建一个无向图,规则是:当i<ji<ji<j且pi>pjp_i>p_jpi>pj时在iii和jjj之间连一条无向边。问最后图中会有几个连通块。【输入格式】第一行一个整数t(1≤t≤105)t(1\leq t\leq 10^5)t(1≤t≤105),表示测试组数。每组第一行一个整数n(1≤n≤105)n(1\leq n\leq 10^5)n(1≤n原创 2022-03-06 20:35:50 · 511 阅读 · 2 评论 -
【算法题归纳合集】图论-最小生成树的扩展应用
一、AcWing 1146. 新的开始(虚拟源点)【题目描述】发展采矿业当然首先得有矿井,小FF花了上次探险获得的千分之一的财富请人在岛上挖了nnn口矿井,但他似乎忘记了考虑矿井供电问题。为了保证电力的供应,小FF想到了两种办法:在矿井iii上建立一个发电站,费用为viv_ivi(发电站的输出功率可以供给任意多个矿井)。将这口矿井iii与另外的已经有电力供应的矿井jjj之间建立电网,费用为pi,jp_{i,j}pi,j。小FF希望你帮他想出一个保证所有矿井电力供应的最小花费方案。【输入原创 2022-02-06 10:34:01 · 1024 阅读 · 0 评论 -
【算法题归纳合集】图论-最小生成树的典型应用
一、AcWing 1140. 最短网络【题目描述】农夫约翰被选为他们镇的镇长!他其中一个竞选承诺就是在镇上建立起互联网,并连接到所有的农场。约翰已经给他的农场安排了一条高速的网络线路,他想把这条线路共享给其他农场。约翰的农场的编号是111,其他农场的编号是2∼n2∼n2∼n。为了使花费最少,他希望用于连接所有的农场的光纤总长度尽可能短。你将得到一份各农场之间连接距离的列表,你必须找出能连接所有农场并使所用光纤最短的方案。【输入格式】第一行包含一个整数nnn,表示农场个数。接下来nnn行,原创 2022-02-05 11:25:55 · 948 阅读 · 0 评论 -
【算法题归纳合集】高级数据结构-并查集
一、AcWing 1250. 格子游戏【题目描述】Alice和Bob玩了一个古老的游戏:首先画一个n×nn×nn×n的点阵(下图n=3n=3n=3)。接着,他们两个轮流在相邻的点之间画上红边和蓝边:直到围成一个封闭的圈(面积不必为111)为止,“封圈”的那个人就是赢家。因为棋盘实在是太大了,他们的游戏实在是太长了!他们甚至在游戏中都不知道谁赢得了游戏。于是请你写一个程序,帮助他们计算他们是否结束了游戏?【输入格式】输入数据第一行为两个整数nnn和mmm。nnn表示点阵的大小,mmm表示一共原创 2022-01-13 10:56:49 · 461 阅读 · 0 评论 -
洛谷P1197 星球大战(并查集)
【题目描述】很久以前,在一个遥远的星系,一个黑暗的帝国靠着它的超级武器统治着整个星系。某一天,凭着一个偶然的机遇,一支反抗军摧毁了帝国的超级武器,并攻下了星系中几乎所有的星球。这些星球通过特殊的以太隧道互相直接或间接地连接。但好景不长,很快帝国又重新造出了他的超级武器。凭借这超级武器的力量,帝国开始有计划地摧毁反抗军占领的星球。由于星球的不断被摧毁,两个星球之间的通讯通道也开始不可靠起来。现在,反抗军首领交给你一个任务:给出原来两个星球之间的以太隧道连通情况以及帝国打击的星球顺序,以尽量快的速度求出原创 2021-10-14 19:35:34 · 357 阅读 · 0 评论 -
【模板题】Kruskal算法求最小生成树
【题目描述】给定一个n个点m条边的无向图,图中可能存在重边和自环,边权可能为负数。求最小生成树的树边权重之和,如果最小生成树不存在则输出impossible。给定一张边带权的无向图G=(V,E),其中V表示图中点的集合,E表示图中边的集合,n=|V|,m=|E|。由V中的全部n个顶点和E中n−1条边构成的无向连通子图被称为G的一棵生成树,其中边的权值之和最小的生成树被称为无向图G的最小生成树。【输入格式】第一行包含两个整数n和m。接下来m行,每行包含三个整数u,v,w,表示点u和点v之间存在一原创 2021-10-08 17:42:48 · 737 阅读 · 0 评论 -
【模板题】并查集(维护结点数量、维护距离、拓展域)
一、并查集模板【题目描述】一共有n个数,编号是1∼n,最开始每个数各自在一个集合中。现在要进行m个操作,操作共有两种:M a b,将编号为a和b的两个数所在的集合合并,如果两个数已经在同一个集合中,则忽略这个操作;Q a b,询问编号为a和b的两个数是否在同一个集合中;【输入格式】第一行输入整数n和m。接下来m行,每行包含一个操作指令,指令为M a b或Q a b中的一种。【输出格式】对于每个询问指令Q a b,都要输出一个结果,如果a和b在同一集合内,则输出Yes,否则输出No。每个原创 2021-10-08 10:45:58 · 300 阅读 · 0 评论 -
洛谷P1195 口袋的天空(生成树,Kruskal)
【题目描述】给你云朵的个数N,再给你M个关系,表示哪些云朵可以连在一起。现在小杉要把所有云朵连成K个棉花糖,一个棉花糖最少要用掉一朵云,小杉想知道他怎么连,花费的代价最小。【输入格式】每组测试数据的第一行有三个数(N,M,K(1≤N≤1000,1≤M≤10000,1≤K≤10)接下来M行每行三个数X,Y,L,表示X云和Y云可以通过L的代价连在一起。(1≤X,Y≤N,0≤L<10000)30%的数据N≤100,M≤1000【输出格式】对每组数据输出一行,仅有一个整数,表示最小的代价。如原创 2021-03-21 09:11:58 · 334 阅读 · 0 评论 -
PTA L2-013 红色警报(并查集)
题目描述:并查集基础题,具体思路备注在代码内,代码如下:#include<bits/stdc++.h>using namespace std;const int MAX_N = 505;const int MAX_M = 5005;int pre[MAX_N]; //每个城市的“上级”int vis[MAX_N]; //标记是否被攻占struct Road{ int x, y; //道路连接的两个城市}road[MAX_M];void init(int n原创 2021-03-14 08:50:53 · 237 阅读 · 0 评论 -
洛谷P1396 营救(图论,最短路,并查集)
【题目描述】该市有m条大道连接n个区,一条大道将两个区相连接,每个大道有一个拥挤度。小明的妈妈虽然很着急,但是不愿意拥挤的人潮冲乱了她优雅的步伐。所以请你帮她规划一条从s至t的路线,使得经过道路的拥挤度最大值最小。【输入格式】第一行有四个用空格隔开的n,m,s,t接下来m行,每行三个整数u,v,w表示有一条大道连接区u和区v,且拥挤度为w两个区之间可能存在多条大道【输出格式】输出一行一个整数,代表最大的拥挤度【输入样例】3 3 1 31 2 22 3 11 3 3【输出样例】2原创 2021-03-10 21:15:04 · 391 阅读 · 0 评论 -
洛谷P1111 修复公路(Kruskal)
【题目描述】给出A地区的村庄数N,和公路数M,公路是双向的。并告诉你每条公路的连着哪两个村庄,并告诉你什么时候能修完这条公路。问最早什么时候任意两个村庄能够通车,即最早什么时候任意两条村庄都存在至少一条修复完成的道路(可以由多条公路连成一条道路)【输入格式】第1行两个正整数N,M下面M行,每行3个正整数x,y,t告诉你这条公路连着x,y两个村庄,在时间t时能修复完成这条公路。【输出格式】如果全部公路修复完毕仍然存在两个村庄无法通车,则输出-1,否则输出最早什么时候任意两个村庄能够通车。【输入原创 2021-03-10 21:03:19 · 102 阅读 · 0 评论