
并查集
Mys_C_K
人生有许多道:曾经踏足的是道,即将踏往的也是道,那什么才是道呢?唯有脚下走的才是道。一切精神或者物质都归于虚无,然后从混沌中衍生出三万道。在悲喜间涉足一条无数前人经历过,且将有无数后人奔赴的道,无论是否已经或者将要到达彼岸,然后便不再回头或是左顾右盼,即使有些道繁盛至极,夜灯如昼,无数人一浪又一浪的涌去,造就了世人皆知的辉煌;即使有些道草木凋敝,荒草丛生,只等勇敢的开拓者斩开荆棘,创造一片天地;这些都无所关,无所在意,彼岸何如、来日何方甚至过往旧事都化作一缕云烟,飘渺碧霄,我自撷高山之月色,独随足落处往行。
展开
-
[NOI2015] BZOJ4195 程序自动分析-离散化-并查集
传送门:右转进入题目题目大意:给定n个式子形如xi=xj或者xi!=xj。问是否可能?首先这个题数据范围大,先离散化一下。然后发现输入顺序不影响答案,所以先考虑等号,就是并查集维护一下即可。对于不等号,如果find出来是在同一个集合里就是NO并退出。最后输出YES。水题……QwQ//NOI 2015//BZOJ 4195#include#include#inc原创 2017-05-13 14:43:20 · 511 阅读 · 0 评论 -
POI2008 BZOJ 1116 CLO -并查集-基环树
题目链接:右转进入题目题目大意:给定一个无向图,选择若干条边,并变成有向的,使每个点的入度为1.题解:因为最后是有向图,点的入度=1意味着图的入度为n意味着图的出度=n意味着图的度为2n意味着图中有n条边意味着这是个基环树森林。显然对于每一个联通块,都检查是否能组成基环树即可。显然如果组成基环树,那么一定有符合题目要求的做法。则么检查呢?非常简单。先生成这个联通块的生成树(有块原创 2017-04-25 10:35:43 · 641 阅读 · 0 评论 -
[SDOI2016] BZOJ4602 齿轮-dfs-带权并查集-数论逆元-质因数分解
传送门题解:总结几种做法,并指出其中的优劣;主要是两种算法,一种是暴力dfs,另一种是并查集。事实上这种“每条边都考虑”大概都可以用上述两种办法处理,并查集复杂度略高,但是其实近乎线性。暴力dfs就是,建一张无向图(不能是有向的),然后对于每个联通块,第一个元素设为1,然后通过第一个元素,算出其它元素的值,然后对于点x,以及边(x,y),如果y也访问过了,就判断一下通过原创 2017-05-19 18:24:58 · 592 阅读 · 0 评论 -
bzoj 4699 树上最短路 - 最短路 - 线段树 - 并查集
过了这么长时间都快忘了怎么做了…… 考虑修改一下dijkstra算法的过程,我们不是每次把一个点的dist放到堆里,而是把所有每条边的起点的dist+边权放到堆里,这样的好处是,在这种出边边权相同的情况下,可以保证每个点只会被更新一次。 这个题的性质是,一个下水道只会在第一次访问的时候用到,因此先预处理一个点被哪些下水道覆盖,然后每次更新一个点就把所有这样的区间拿出来,然后更新这些区间能够到达...原创 2018-07-21 09:28:58 · 936 阅读 · 0 评论 -
删点最小生成树 - 可并堆 - 并查集 - 最小生成树
给一个图,对每个点询问删去这个点的生成树是啥。 考虑先求出一个MST,然后删去一个点就要用剩下的边把分散的联通块搞起来。 有两种情况,要么是子树之间连,要么是子树连向外面。 对应非树边,非树边是会在端点LCA的地方贡献第一种情况,会在路径上除了LCA的其他点贡献第二种情况。前者总O(m)条边,直接判掉。后者考虑稍微朴素的做法是,我们发现一个子树连向外面只会连出边权最小的那个边。因此在树上做差...原创 2018-08-04 14:12:27 · 781 阅读 · 0 评论 -
bzoj 3832 [Poi2014]Rally - 线段树 - 并查集
对拓扑序建线段树,每条边等价于一个区间覆盖,没了#include<iostream>#include<cstring>#include<cstdio>#include<algorithm>#include<climits>#include<queue&am原创 2018-06-25 09:07:07 · 257 阅读 · 0 评论 -
友好国度 - 数论 - 容斥 - 并查集/LCT
题目大意:给你一颗数,点有点权,问有多少路径,路径上点权的gcd是1.题解:考虑容斥,转为计数是g的倍数的路径。把所有g的倍数的边(边权是两端点权的gcd)拿出来,每次合并两个集合前用两个集合的大小的乘积对ans[g]有贡献。然后并查集即可啥你问我为啥代码看起来像是个LCT?#include<bits/stdc++.h>#define rep(i,a,b) for(in...原创 2018-11-05 12:43:00 · 230 阅读 · 0 评论 -
[集训队作业2018]UOJ 418 三角形 - 线段树合并 - 堆 - 并查集
题目大意:给一棵树,每次可以选择拿走某个点的所有石子(放到手上),或者在任意一个满足其儿子节点都已经有石子的点xxx放恰好wxw_xwx个石子。对每个点xxx求恰好在这个位置放wxw_xwx个石子,一开始手上要有多少石子?n≤105n\le10^5n≤105。题解:考虑对每个子树怎么暴力求;考虑将问题反过来,每次变为若一个点有石子,就在其儿子节点都放上石子,然后把这个点的石子取走。一开始...原创 2019-02-26 11:50:35 · 374 阅读 · 0 评论