![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
并查集
Eirlys_North
这个作者很懒,什么都没留下…
展开
-
bzoj 1015 正难则反+并查集
Description 很久以前,在一个遥远的星系,一个黑暗的帝国靠着它的超级武器统治者整个星系。某一天,凭着一个偶然的机遇,一支反抗军摧毁了帝国的超级武器,并攻下了星系中几乎所有的星球。这些星球通过特殊的以太隧道互相直接或间接地连接。 但好景不长,很快帝国又重新造出了他的超级武器。凭借这超级武器的力量,帝国开始有计划地摧毁反抗军占领的星球。由于星球的不断被摧毁,两个星球之间原创 2016-12-18 16:51:53 · 403 阅读 · 0 评论 -
bzoj 3910 并查集+LCA
题意:给出一棵树,给定起点和要经过的点的序列,已经经过的点就不去了,即在剩下的点中按照顺序依次去访问还没有访问过的点,问要经过多少条边。很显然的一个做法就是每当我们走一条路径的时候,就把这条路径上所有点都打上已经被经过的标记,对于一个点,如果它的标记为真则不用再走。所以复杂度高的原因就是一些点会被来回来去的多次被标记,每次处理的复杂度都是O(n)的但实际上只要一个点被打上标记就不用再管原创 2017-04-13 07:25:12 · 585 阅读 · 0 评论 -
bzoj 2054 并查集
题意:给定一个序列,多次将某个区间染成某种颜色,求最后每个点是什么颜色由于只求最后染的颜色,所以倒着染这样一个位置最多只需要染一次,染过就不需要再染也就是说,对于当前染色,区间内已经染色的位置这次染色就要直接跳过,即只染区间内还没有被染色的并查集的一个经典神助攻:删除一个数后快速找到它后面第一个没有删除的数(处理完一个位置后快速找打它后面第一个需要处理的位置)这样就能保证每个位原创 2017-04-12 21:34:52 · 490 阅读 · 0 评论 -
bzoj 1854 并查集
Descriptionlxhgww最近迷上了一款游戏,在游戏里,他拥有很多的装备,每种装备都有2个属性,这些属性的值用[1,10000]之间的数表示。当他使用某种装备时,他只能使用该装备的某一个属性。并且每种装备最多只能使用一次。 游戏进行到最后,lxhgww遇到了终极boss,这个终极boss很奇怪,攻击他的装备所使用的属性值必须从1开始连续递增地攻击,才能对boss产生伤害。也就是说一原创 2017-04-12 21:06:22 · 399 阅读 · 0 评论 -
bzoj 1116 并查集
DescriptionByteotia城市有n个 towns m条双向roads. 每条 road 连接 两个不同的 towns ,没有重复的road. 你要把其中一些road变成单向边使得:每个town都有且只有一个入度Input第一行输入n m.1 OutputTAK或者NIE 常做POI的同学,应该知道这两个单词的了...第一眼不冷静的想写原创 2017-04-12 20:24:49 · 446 阅读 · 0 评论 -
bzoj 1104 贪心+并查集
题意:n*m的网格,所有格子都被水淹没,给定一些关键点,求用最少的抽水机抽干所有关键点的水(水的流动遵循连通器原理)我觉得这道题的真名应该叫做 “被水淹没,不知所措”,考试的时候自己YY出来的好棒棒= =,蛮好的一道题经过贪心可知,(1)一定存在一种最优解使所有的水泵都在关键点上(2)由于水都是从高往低留,所以一定会优先放置高度低的关键点那么我们将所有关键点按照高度排序,从原创 2017-04-12 20:00:38 · 463 阅读 · 0 评论 -
bzoj 1098 dfs+并查集优化
题意:给定一张无向图,一个点集能分为两部分当且仅当任意分别位于这两部分的点之间有边相连。求最多能分为几部分及各部分的大小一眼看过去,这题不就是求反图的连通块个数以及大小么....再看一眼数据范围,显然建反图直接做会T...那我们就枚举每个点dfs一遍...显然O(n^2)并不会改变T的结果...考虑优化,并查集简直神助攻...并查集可以帮助我们在删除一个数后快速找到下一个没有被原创 2017-04-12 19:17:29 · 310 阅读 · 0 评论 -
bzoj 3563 ╮(╯▽╰)╭+ 并查集
题意:N个点,M条无向边,Q个操作,每个操作中破坏K条边,其中编号和K已经加密,即原数异或之前未联通的个数(给的是原k,但后面有异或后的k的个数个编号),判断每个操作后是否联通会做题不等于会出题系列..... ╮(╯▽╰)╭虽然k已经加密,但是由于k后面跟着k个编号,我们依旧能知道加密后的k╮(╯▽╰)╭由于一个数异或两次相当于没有异或,所以我们很容易就得到了之前未联通的个数╮原创 2017-02-04 12:34:00 · 403 阅读 · 0 评论 -
uva 1664 并查集+贪心
题意:一棵n个节点的树,找到一个点到其他节点容量和最大,两点之间的容量为路径上的最小边经过简单的画图,发现可以用并查集..把答案节点维护成并查集的根节点解决两点的容量问题,因为是最小边,我们排序后从大到小枚举,这样我们所处理的边一定是端点a、b之间最短路,可以直接贡献答案对于a、b所在集合的根节点ta、tbsum[ta]=sum[ta]+len*size[tb]sum[tb]=原创 2017-02-15 09:58:39 · 367 阅读 · 0 评论 -
bzoj 1529 并查集
题意:n个存钱罐,每个的钥匙都在一个存钱罐里,想要把所有存钱罐中的钱都拿出,问最少砸几个存钱罐一眼看过去就是找tarjan缩点后重建的图中有几个入度为0的强连通块...mdzz爆栈了然后才发现,其实就是找连通块的个数,mdzz并查集不就行了(思想类似团伙)var n,ans,x,y :longint; i :lon原创 2017-02-23 10:24:29 · 804 阅读 · 0 评论 -
bzoj 3038 树状数组+并查集
同bzoj 3211鬼知道为什么数列中的数不大于1e12,但是要用int64来存开根号的数 var n,m,op,l,r,c :longint; f :array[0..100010] of longint; a :array[0..100010] of int64;原创 2017-02-22 23:32:23 · 319 阅读 · 0 评论 -
bzoj 3211 树状数组+并查集
题意:1、询问[l,r]区间和2、修改[l,r]区间的delta:dalta[i] -> int(sqrt(delta[i]))思路:1、区间求和和区间修改我们可以考虑相应的数据结构:线段树或树状数组, 这里我们选择树状数组(毕竟树状数组常数小还好写=。=)2、开根号的性质:原创 2017-02-03 23:50:33 · 519 阅读 · 0 评论 -
bzoj 1370 团伙 并查集
题意:n个人,朋友的朋友是我的朋友,敌人的敌人是我的朋友,互为朋友的组成一个团伙,问团伙的数量并查集入门题把一个人拆成两个,x表示朋友集合,n+x表示敌人集合朋友的朋友是我的朋友:直接合并x和y敌人的敌人是我的朋友:合并x和n+y ,合并 y 和n+1var n,m,x,y,ans :longint; vis :a原创 2017-02-22 21:36:43 · 343 阅读 · 0 评论 -
bzoj 1455 洛谷 P3377 左偏树+并查集
bzoj 1455题意:n个人,每个人有一个分数,每个人都是一个独立的团,有两种操作: 1、M x y,在x和y都是活的前提下,把x所在团和y所在团合并,否则忽略此操作 2、K x 在x是活的的前提下,把x所在团分数最小的人杀死,并输出该人分数,若x已经死亡则输出0显然,用并查集维护团的信息,每次只删除分数最小的人,并涉及合并,妥妥的左偏...原创 2017-02-09 22:38:10 · 424 阅读 · 0 评论 -
bzoj 1016 kruscal+乘法原理
题意:求n个点、m条边的不同的最小生成树的方案数每种边权的边数量固定、作用固定先做一遍最小生成树,求出每种边权在最小生成树中的数量num[i]再从小到大对每种边权进行dfs,求出对于第i种边权,有多少种满足num[i]的取法根据乘法原理乘上即可对于已经处理完的第i种边权,把该种边权所有的边能加到最小生成树的就加进去,再进行下一种边权的判断注意并查集不要用路径压缩,不然不方便原创 2017-05-02 15:50:03 · 547 阅读 · 1 评论