
最小生成树&并查集
最小生成树&并查集
_rhinoceros_
非淡泊无以明志,非宁静无以致远。
展开
-
(并查集)[POI2005]SKA-Piggy Banks
一、算法分析个人做这道题就联想到了一本通里面一道名为格子游戏的题目,关键思路就在于如何利用并查集判环。方法是当即将连接的两个点已经处于同一个连通块的时候,就说明连接这两个点之后会产生一个环。对于本题而言,易证需要破罐的条件是出现环,且由于每个钥匙都一定在某个罐子中,因而不会出现某个呈链状的连通块。详见代码及注释二、代码及注释//当出现环形的时候,就需要破掉一个罐子//出现环形的条件:参考格子游戏那道题,当要连接的这两个点已经属于同一个连通块的时候,就说明连上之后会成环//就样例而言,一号钥匙在原创 2020-07-14 21:03:31 · 173 阅读 · 0 评论 -
并查集-模板-LOJ109
一、算法分析样板题几乎没必要分析,值得注意的是这道题需要先构建一个01序列,再进行取模再输出结果。这里01序列的构建方法,可以用位运算简单实现,事实上位运算左移一位等于原值乘以2,但是对这道题来讲,写左移显然比乘以2更好理解,也有更高的效率。(详见代码)二、代码及注释#include<iostream>#include<cstring>#include<cs...原创 2019-12-03 02:05:31 · 193 阅读 · 0 评论 -
(并查集)洛谷P1197 [JSOI2008]星球大战
一、算法分析个人看到这道题就想到之前做过的一道福建夏令营的题目,兽径管理兽径管理求的是最小生成树,但是给的边是动态的,这个时候我们可以倒着求,先求给出所有边的最小生成树,然后再去掉边,如果去掉的边恰好不在最小生成树上,则可以继承前面的答案,否则重新跑最小生成树。对于星球大战这道题,首先分析这道题是并查集求连通块,并查集求连通块的基本形式是先设连通块个数为点的个数,然后每次合并操作会将连通块个数减一。而这道题的思路和兽径管理很像。因为对于并查集而言,建边远比去边容易。因而我们考虑只建边的情况下解决这道原创 2020-07-14 11:02:20 · 269 阅读 · 1 评论 -
(细节处理,负数下标变正数下标,并查集)洛谷P2078 朋友
一、算法分析算法很直观,直接用并查集判朋友关系,预处理时先让小明和小红成为朋友。最后找和小明(或小红)是朋友的人,统计其中男性和女性的个数,输出较小的那个就行。本题的一个关键在于细节处理,女性下标是负值。这时可以观察题目给出的数据范围,数据范围在10000,不大这样的话,就可以把所有女性的下标加上20001,注意是20001不是20000,要再多加一个1.二、代码及注释#include<...原创 2020-01-22 10:11:04 · 365 阅读 · 0 评论 -
AcWing 1469. 围栏规划题解(并查集)
(之前写在小号里了,现在大号找回来了,所以再搬回来)一、算法分析先画图分析然后基本思路是并查集,并查集的根节点维护一个矩形,用来表示框住当前并查集的这个块最小的矩形,每次动态更新。更新方式,先对于每个块存这个矩形的左上和右下两个点的位置,对于每条连边,用新加的块更新原有的块的四个坐标,然后把新加的块并到原有块的并查集里面二、代码及注释//先画图分析//然后基本思路是并查集,并查集的根节点维护一个矩形,用来表示框住当前并查集的这个块最小的矩形,每次动态更新。//更新方式,先对于每个块存这个矩形原创 2021-10-17 10:08:32 · 79 阅读 · 0 评论 -
并查集-洛谷P1111修复公路
一、算法分析这道题的算法很直观,对于两个村庄之间的连接性,直接用并查集进行处理就可以。处理时要先将修路时间进行排序,然后按时间顺序将相连的村庄并在同一集合里面。但是这个问题的难点在于村庄之间的路是双向连通的,这样的话,在每次操作之后进行判断它们是否都在一个集合里面的方法就是错误的,比如这段代码就是错误的:#include<iostream>#include<cstdio&g...原创 2019-12-04 23:26:45 · 321 阅读 · 0 评论 -
(prim)[USACO14MAR]Watering the Fields S
一、算法分析首先分析题意判断出是最小生成树问题,然后发现是稠密图选择prim算法。本题的特点是,其是对于一个残缺的图跑最小生成树。此时加个判断,当prim算法无法向前更新的时候,即说明无法实现最小生成树,直接跳出。二、代码及注释#include<iostream>#include<cstring>#include<cstdio>#include<algorithm>#define x first#define y secondusing na原创 2020-07-02 20:01:13 · 155 阅读 · 0 评论 -
(最小生成树)洛谷P2916 [USACO08NOV]安慰奶牛Cheering up the Cow
一、算法分析刚看到题的时候没什么头绪,然后先模拟了一下题上的例子,感觉本题基本框架还是最小生成树,但是需要预处理一下,刚开始的想法是把点权加到边权上面,好能求最小生成树。然后开始的实现方式就是把每个边的边权加上这个边的起点的点权,样例也能过。但是交上去之后只能过第一个点。说明这样的方法不对,那么就需要建模求解正确方法,建模时将点分为三类,起点(根)、叶子、中间点。可以证明在一个生成树中,根据题目...原创 2020-02-08 18:48:50 · 180 阅读 · 0 评论 -
(最小生成树)洛谷P2126 Mzc家中的男家丁
一、用Kruskal算法求最小生成树基本算法紫书上写的比较详细了,自己理解的话,核心操作就是两步,第一步排序,第二步按照所排顺序连边,这里的排序方式是按照边权由小到大排,连边方式是选不会使得已有部分成环的边,也就是起点和终点不在一个连通分量的边。二、代码及注释这里的并查集部分之间搬了之前自己的并查集有关博客的代码。#include<iostream>#include<c...原创 2019-12-26 16:22:27 · 128 阅读 · 0 评论