
并查集
yzyyylx
这个作者很懒,什么都没留下…
展开
-
Bertown Subway CodeForces - 884C
题面题意 给出n个数,i可以到达第i个数,且这n个数为1到n的一个排列,现在可以交换两个数,问最多有几组点可以两两相互到达.方法 一开始没有做出来是因为没有发现这n个数都不同,有了这个条件就说明,从i点出发必然能够回到i,因而可以将它理解为几个环,每个环上的点都两两能够到达,种类数为其大小的平方,一次交换可以将两个不同环变成一个大环,只要将两最大环合并计算种树即为答案 上述条件仅用并原创 2017-11-05 15:38:25 · 480 阅读 · 0 评论 -
codeforces954I Yet Another String Matching Problem
题面题意定义一种对字符串的操作为将某种字符全部替换为另一种字符,定义两个字符串之间的距离为让两个串相同的最少操作次数.现给出两个字符串S,T,求S的每个长度为∣|∣T∣|∣的子串与T之间的距离.做法首先转化一下两个字符串a,b之间的距离,若a[i]=u,b[i]=va[i]=u,b[i]=va[i]=u,b[i]=v,则可以由u向v连一条边,这样最后所有联通块的大小减一之和即为答案.现...原创 2019-04-18 08:42:32 · 342 阅读 · 0 评论 -
codeforces1023F Mobile Phone Network
题面题意有n个点,并给出k条还没有权值的边和m条有权值的边,要求你给这k条边赋上权值,使得存在一种最小生成树包含这k条边,问k条边的最大权 值和是多少。做法首先可以先求出这棵最小生成树,然后这m条边中的所有非树边都会与原树构成一个环,要满足它不是树边,它就必须是环上的最大值,相当于要对环上的所有树边都取一次最小值,这个用树链剖分,差分+启发式合并或可并堆…都可以做,但都很麻烦。可以发现,...原创 2019-02-26 18:51:13 · 190 阅读 · 0 评论 -
Codeforces 461D Appleman and Complicated Task
题面题意给出一个n∗nn*nn∗n的正方形,每个点为1或0,要求每个点周围的所有点之和为偶数,现在已经确定了几个点的数字,问一共有几种正方形满足条件。做法首先可以把周围四个数的和为偶数看作周围四个数的异或值为0,因此可以发现(i,j)=(i−2,j)Xor(i−1,j−1)Xor(i−1,j+1)(i,j)=(i-2,j) Xor (i-1,j-1) Xor (i-1,j+1)(i,j)...原创 2019-01-02 23:26:15 · 233 阅读 · 0 评论 -
The 2017 ACM-ICPC Asia Beijing Regional Contest C - Graph
题面题意给出一张图,每次询问给出l,r,定义序号在l,r之间的点为安全的,求只经过安全点就可以互相到达的点对数。做法首先题目不难转化为求所有联通块的贡献和,每个联通块的贡献为(s−1)∗s/2(s-1)*s/2(s−1)∗s/2,s表示该联通块的大小。因为是联通块,所以我们考虑有哪些边在块内,然后每条边记录两条(u->v,v->u),根据左端点排序,这样序号在一段区间内的点所...原创 2018-10-31 15:00:35 · 384 阅读 · 0 评论 -
loj #2322. 「清华集训 2017」Hello world!
题面题意给出一棵树,要求支持两种操作: 1.给出u,v,从u开始每次向v条k条边(如果到v的距离小于k则直接到达v),对所有经过的点的权值开根。 2.给出u,v,从u开始每次向v条k条边(如果到v的距离小于k则直接到达v),求所有经过的点的权值和。做法根据每次跳的长度k进行分块,令块大小为S。 然后对于1~S中的每一个数i建一个森林,每个点的父亲是这个点在原树上与它深...原创 2018-09-02 11:35:33 · 677 阅读 · 1 评论 -
可持久化并查集
介绍可以查询并查集的历史版本,即几次操作之前的连通状态,有在线与离线两种不同算法.离线算法相比于在线算法,时间复杂度与空间复杂度均要优越得多,若要查询第k次操作之后的状态,则可以视为k节点与此节点相连,否则视为上一节点与此节点相连,则这样将会形成一棵树,记录时用启发式合并,将较小树向较大树合并,而且不进行路径压缩,这样复杂度为O(n*logn),dfs一遍即可.代码(以洛谷 P3402 【模板】可持原创 2018-03-22 18:48:15 · 295 阅读 · 0 评论 -
并查集
作用 可以轻松记录并判断两个点是否在同一个连通图中 例如给出一些边,问两点是否连通的问题 也就是判断两个元素是否属于同一类实现方法 用树的形式来记录 点a的父节点就是指a的祖先结点中深度最小的那点,也就是父节点就是自己的那个点 一开始每一个点的父节点都是它自己 *父节点查找方法: 若a的父节点就是自己,则不变,反之,它的父节点为其父节点的父节点,详见代码原创 2017-11-05 15:53:22 · 226 阅读 · 0 评论 -
洛谷 P4092 [HEOI2016/TJOI2016]树
题面题意给出一棵树,两种操作,给节点打标记(1为根,初始仅1打了标记),询问祖先中距离他最近的打了标记的节点做法这题可以用暴力水过去,也可以用树链剖分来做. 但利用并查集可以十分巧妙地解决这题. 首先可以发现随着询问的进行,每点的答案将会被分成越来越多块,而倒过来进行的话则会发现块数将会越来越少直到最后的一块,且每次都是两块并成一块,因此我们可以记录下操作后用并查集维护,若一个点打了标记,则其父原创 2018-03-30 16:49:16 · 361 阅读 · 0 评论 -
codeforces1149D Abandoning Roads
题面题意给出一张无向图,每条边的权值只有两种:a或b(a<b),现在对每个点求,在这张图的所有最小生成树中,1号点到它的最短距离是多少.做法首先在建最小生成树时,权值为a的边比权值为b的边的优先级高,因此可以先将所有边权为a的边缩起来,这样如果权值为b的边连接的点在同一个联通块中,则这条边没有价值.然后我们可以发现,如果一条路径经过某个联通块两次,则这条路径不可能出现在最小生成树上...原创 2019-05-12 21:19:07 · 400 阅读 · 0 评论