并查集
小菜鸡加油
菜鸡
什么都能折磨
展开
-
最长连续序列(关于并查集的复杂度)
如果只有路径压缩,或者只有按秩合并,并查集单次操作的复杂度都是 O(log n) 。只有路径压缩 + 按秩合并的并查集,单次操作的复杂度才是 O(α) 。今天朋友问我一道面试题的时候蚌埠住了。要求On。桶排不严格On,logn不能带。正解目前未知(我太菜了)。但是并查集是O(α),实在没办法可以用。...原创 2021-07-26 17:56:41 · 254 阅读 · 0 评论 -
F. Phoenix and Earthquake(结论+模拟+启发式合并)
https://codeforces.com/contest/1515/problem/F思路:证明参考:https://www.luogu.com.cn/blog/_post/331276我开始想的是,每次都选最大的ai之后将他与跟他相连的且不在他集合中的点合并,尝试用优先队列 + 并查集可以轻松实现。然后wa了。发现有个很重要的问题没有处理。如果按照下面这样去处理。每次当前连通块合并了新的,但是原来之前合并到这个连通块里的,其siz并没有更新,显然一个连通块里的每个点的s..原创 2021-05-06 20:01:22 · 216 阅读 · 1 评论 -
B. Monopole Magnets(思维+连通块)
https://codeforces.com/contest/1344/problem/B思路:开始看成了白块区域不能放S极了。看懂题意的话还是能做对的。1.如果有一行/一列存在不连续的黑块。 -12.如果有一行全空而不存在列全空。-1/反之亦然。剩下的就全部扔S极,每个连通块里扔一个N极就好#include<iostream>#include<vector>#include<queue>#include<cstring>#i原创 2021-04-25 19:56:01 · 161 阅读 · 0 评论 -
D. Cow and Snacks(思维+并查集)
https://codeforces.com/problemset/problem/1209/D思路:每个连通块内考虑问题,将有关系的食物连成一个连通块。每个块的贪心解就是其连通块的siz-1#include<iostream>#include<vector>#include<queue>#include<cstring>#include<cmath>#include<map>#include<set>原创 2021-03-05 19:01:23 · 174 阅读 · 0 评论 -
F 魏迟燕的自走棋(思维+贪心+并查集维护联通块/左部点配对边<=2的匈牙利)
https://ac.nowcoder.com/acm/contest/9984/F参考:F 魏迟燕的自走棋(贪心+并查集)将每个人看成一个点,武器的能力值抽象成边,这样就转化成图论的模型了。然后可以转化成联通块去看这种点之间连边的最值维护似乎跟并查集维护联通块容易联系到一起(应该是个trickC. Bertown Subway(思维+贪心+并查集维护联通块)从联通块角度去看,如果一个联通块还没有形成环,那么他们之间的武器是可以互相换的,即他们当中的任意点都可以拥有新武器,我们称这个原创 2021-02-21 13:42:27 · 205 阅读 · 1 评论 -
C. Bertown Subway(思维+贪心+并查集维护联通块)
https://codeforces.com/contest/884/problem/C题意:给你1-n的一个排列a,你从某一个位置a[i]可以到达a[a[i]],我们定义便利度为令i和j都从1-n,从i能到达j的pair的对数(也包括i到i)。 市长想要改变这个排列使得它的便利度最大,但是他最多只能改变两个数字,并且改变完之后的排列也必须是1-n不重复的。求能得到的最大便利值。思路:其实就是开始的图就是各个联通块,想让最后答案最大,肯定让某两个大的联通块合并,再On算一下最后的答案。合并连原创 2021-02-20 23:13:37 · 216 阅读 · 1 评论 -
E. New Reform(dfs判环/并查集判环)
https://codeforces.com/problemset/problem/659/E思路:构造发现如果没有环,让一个点牺牲最大,剩下全部能到;如果有环就没有牺牲#include<iostream>#include<vector>#include<queue>#include<cstring>#include<cmath>#include<map>#include<set>#include原创 2021-02-17 22:50:58 · 166 阅读 · 0 评论 -
D. Harmonious Graph(思维+并查集维护连续串)
https://codeforces.com/problemset/problem/1253/D题意:给定n点m边图。问最少添加几条边,使变为平衡图。即若a~b联通,[a,b]中的所有点可达。思路:比较明显要缩点,把一串连续的连成一个块,并查集就好。然后从第一个联通块的最大值开始,顺序枚举当前的点的块的最大值是否在maxv中,不在就更新一个更大maxv,并连边。如果当前的顺序已经超过了maxv,那就是一个新的独立联通块。#include<iostream>#include&l原创 2021-02-17 22:02:56 · 139 阅读 · 0 评论 -
A. String Transformation 1(思维+并查集好题)
https://codeforces.com/problemset/problem/1383/A给定两个字符串A,B,每次在A内选取若干个相同字符x改为另一个字符y,且保证x<y,求把A改成B的最小操作数。 1⩽∣A∣=∣B∣⩽105,多组数据。思路:将替换的过程看成单向边的连边,发现有些边实际上是能简化掉的,到达缩小操作数的目的。我们把一次字符x变为字符y的操作看成一条x到y的有向边,该图一定是一个DAG。发现如果存在a→b,a→c,b→c,那么实际上a→c是没有必要的(直接借助a.原创 2021-02-09 16:37:59 · 215 阅读 · 0 评论 -
点一成零(并查集维护联通块+组合数学)
https://ac.nowcoder.com/acm/contest/9981/D链接:https://ac.nowcoder.com/acm/contest/9981/D来源:牛客网牛牛拿到了一个n*n的方阵,每个格子上面有一个数字:0或1行和列的编号都是从0到n-1现在牛牛每次操作可以点击一个写着1的格子,将这个格子所在的1连通块全部变成0。牛牛想知道,自己有多少种不同的方案,可以把全部格子的1都变成0?所谓连通块,是指方阵中的两个正方形共用一条边,即(x,y)和以下4个坐标的数是原创 2021-02-06 23:52:46 · 209 阅读 · 0 评论 -
POJ - 3694 Network(边连通分量缩点+dfn上朴素LCA+并查集动态缩点)
http://poj.org/problem?id=3694首先注意这个题中有重边。有重边的话除了vector<>外开一个map记录一下这个边有没有加过,如果加过了就不要再加了,会影响判断。注意poj中map的pair用列表初始化{}会CE,需要make_pair.普通做法当然就是每加一条边重新算一次桥,但这样复杂度将达到O(q*M).然后考虑缩点,缩完点后变成了一颗树。如果不懂边连通缩点先去看下上一篇博客(讲边缩点的)我们需要“动态地”在原图的基础上求桥。可以发..原创 2020-10-03 00:23:06 · 146 阅读 · 0 评论 -
D Secret Passwords(思维+并查集)
https://www.luogu.com.cn/problem/CF1263D题意翻译给定nn个字符串如果存在一个或多个字母同时在字符串aa和bb中出现 这aa和bb就被分在同一组 如果aa和cc在同一组bb和cc在同一组 则aa和bb也在同一组问所有的字符串最后被分成几组输入输出样例输入 #1复制4ababd输出 #1复制2输入 #2复制3abbcabc输出 #2复制1输入 #3复制1codeforces输.原创 2020-09-17 23:04:52 · 200 阅读 · 0 评论 -
D. Cow and Snacks(并查集+建图连通块)
https://codeforces.com/problemset/problem/1209/D题意翻译nn种花,kk个客人,每个人喜欢两种编号不同的花。但是每种花在花店里只有一束。客人按顺序进入花店,会买走所有她喜欢且仍在店铺里的花。如果一个客人买不到任何一束花,那么她就会十分沮丧导致变成肥宅。现在你可以自己安排这nn个人的顺序,使得肥宅的数量最小。翻译 by @皎月半洒花。输入输出样例输入 #1复制5 41 24 31 43 4输出 #1复制1...原创 2020-09-17 00:14:06 · 237 阅读 · 0 评论 -
D. Vessels(并查集+模拟)
https://codeforces.com/problemset/problem/371/D题意:给一个从上到下容积依次增大的容器,多次操作,给某个容器倒水,如果这个容器满了就会溢出,直到最后一个都满了就溢出到外面。然后途中会多次询问某个容器的体积。思路:暴力的话是(n*m)的。考虑优化,能不能快速找到实际要倒的那个容器编号呢?比如1号满了就直接找到2号,2号满了直接找到3号,5号满了直接找到6号。这里用并查集优化,当前编号容器满了就和下一个编号的容器用并查集建边,以此类推。#include原创 2020-09-16 16:40:02 · 128 阅读 · 0 评论 -
G. Path Queries(带权并查集+kruskal思想)
https://codeforces.com/problemset/problem/1213/G题意翻译题目描述\mathsf E \color{red}\mathsf{ntropyIncreaser}EntropyIncreaser有一棵nn个点的树,每条边都带权。她会问你mm个问题,每次给你一个正整数qq,求最大权值不大于qq的简单路径数量。需要注意的是,对于一个点对(u,v)(u,v)只记一次,单独一个点不算路径。输入格式第一行两个正整数n,mn,m,...原创 2020-09-13 23:11:54 · 282 阅读 · 0 评论 -
D - Cyclic Components
CodeForces - 977EYou are given an undirected graph consisting ofnnvertices andmmedges. Your task is to find the number of connected components which are cycles.Here are some definitions of graph theory.An undirected graph consists of two sets: se...原创 2020-08-06 18:44:28 · 169 阅读 · 0 评论 -
P1892 [BOI2003]团伙
https://www.luogu.com.cn/problem/P1892题目描述给定n个人,他们之间有两个种关系,朋友与敌对。可以肯定的是:与我的朋友是朋友的人是我的朋友 与我敌对的人有敌对关系的人是我的朋友现在这nn个人进行组团,两个人在一个团队内当且仅当他们是朋友。求最多的团体数。输入格式第一行一个整数n代表人数。第二行一个整数m代表每个人之间的关系。接下来m行每行一个字符optopt与两个整数p,qp,q如果optopt为F代表...原创 2020-07-31 18:52:51 · 451 阅读 · 0 评论 -
P2814 家谱
https://www.luogu.com.cn/problem/P2814题目背景现代的人对于本家族血统越来越感兴趣。题目描述给出充足的父子关系,请你编写程序找到某个人的最早的祖先。输入格式输入由多行组成,首先是一系列有关父子关系的描述,其中每一组父子关系中父亲只有一行,儿子可能有若干行,用#name的形式描写一组父子关系中的父亲的名字,用+name的形式描写一组父子关系中的儿子的名字;接下来用?name的形式表示要求该人的最早的祖先;最后用单独的一个$表示文件结束...原创 2020-07-26 20:20:55 · 138 阅读 · 0 评论 -
畅通工程1863(并查集)(WA的思考)
畅通工程Time Limit: 1000/1000 MS (Java/Others)Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 47870Accepted Submission(s): 21342Problem Description省政府“畅通工程”的目标是使全省任何两个村庄间都可以...原创 2020-02-04 18:11:39 · 189 阅读 · 0 评论 -
还是畅通工程 hdu1233(Kruskal算法)模板题 TLE改法
还是畅通工程Time Limit: 4000/2000 MS (Java/Others)Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 73901Accepted Submission(s): 33376Problem Description某省调查乡村交通状况,得到的统计表中列出了任意两...原创 2020-02-04 15:13:27 · 154 阅读 · 0 评论 -
畅通工程hdu1232(并查集)
畅通工程Time Limit: 4000/2000 MS (Java/Others)Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 86287Accepted Submission(s): 45860Problem Description某省调查城镇交通状况,得到现有城镇道路统计表,表中列...原创 2020-02-04 13:12:25 · 114 阅读 · 0 评论 -
超有爱的并查集~(转)
超有爱的并查集~ mark#include<iostream>#include<cstdio>#include<cstring>#include<cmath>#include<algorithm>using namespace std;int pre[1010]; //里面全是掌门 int uni...原创 2020-01-30 18:30:28 · 332 阅读 · 0 评论