20260815 - 最小生成树 总结

前言

总算把题补完啦——!

排名掉的特别下面的一次!!现在的水平也是菜完了哈哈 qwq。

想不起来有什么梗放在这里了咋办 .jpg

鸭鸭不好玩了 www 玩了几天就凉了喵。

不过今天 mmt 哪里去了??

A - 局域网

最小生成树,我们需要去除的最大,那当然就是保留的最小了,那不就是最小生成树嘛。

B - 口袋的天空

板子题,注意判一下无解的情况。

C - Destruction

重题了马力赛 T2。

和 A 是双倍经验,只是这里注意不论需要与否都一定要保留负数,否则会带来负收益。

D - Modulo MST

有用双搜的,但我发现没必要。

加点剪枝爆搜每种选边情况(恰好选 \(n-1\) 条)就可以了,还跑的挺快的(\(40\)ms 耶)。

E - MST + 1

用在线做的这辈子有了。

发现在判断一条 \(u \to v\) 的边权为 \(w\) 的边能否加入最小生成树的时候,只需要把所有边权 $ < w$ 的全部加进并查集,然后判断 \(u\) 和 \(v\) 连通与否即可(不连通是能加入)。所以可以离线下来对 \(w\) 从小到大排序做。

F - Road Reform

糖题,不知道为什么在我过之前没人动这题,我过了之后就接连不断的过了好多人,好可怕。

首先你把最小生成树跑出来。如果最小生成树的最大那条边都 \(\ge k\) 则再换边只会让答案更大了,所以直接求出最小生成树变成题目指定条件需要的代价即可;否则最小生成树是很小的,一定可以再融进去一条大的边(删掉一条小的边),那么我们直接在全局边中找出离 \(k\) 最近(比 \(k\) 小或者比 \(k\) 大都可以)的边权的边即可。

不会有人问我那个一定会融进去的证明吧,这这这这很简单啊,大概就是当前考虑的这条边所连接的两个点,一定存在一条最小生成树(原树)中的边,使在连这条边时那两个点处于同一个连通块,但是连之前在不同的连通块,那么当前考虑的这条边(要加进去的边)肯定就可以代替原树中的这条边了。

G - Transportation

依旧不记得什么时候的原题了,是史呀。

虚点后求最小生成树即可,但是需要考虑四种情况,分别是啥也不建、只建 \(A\)、只建 \(B\) 和 \(A\) \(B\) 都建。

H - Ring MST

其实赛时想出了 \(90\%\) 然后卡在最后一步求代价上了,唉唉我好菜。怎么有人用 SA 乱搞啊,太强了。

大概就是你考察 Kruskal 求解的过程,首先有一个边权排序的环节,所以我们也先把边权排个序。维护 \(n\) 表示当前的连通块数量,最初就是读入的 \(n\)。枚举每条边(按排序后的顺序),显然在加入所有“有用”的当前类型边后,连通块个数会变为 \(\gcd(n,A_i)\),那么就是加了 \(n-\gcd(n,A_i)\) 条边(赛时就是这里没想出来 TvT),累加贡献然后 \(n \gets \gcd(n,A_i)\) 即可。如果在任何时刻 \(n\) 变成 \(1\) 了就可以 break 循环了。

最后输出答案即可,不过需要特判最后还 \(n > 1\) 的情况,那就无解了。

I - MST Unification

想出来了但因为时间原因出现了很多问题。

出现多个最小生成树的原因无非就是有权值一样的边,那么仔细想想就可以发现,需要处理掉的边就是与最小生成树内边权值相同,并且在只考虑比当前边权值小的边的情况下,当前边完全是可以加入最小生成树的那类边。注意不是所有加不进去的都要考虑,而是本来在没有其他这种权值的边可以加进去、但加了别人就因为顺序问题卡不进去的那些。

这里就可以简单并查集维护一下了,并且需要处理的边都只需要对其权值 \(+1\) 这条边就废掉了,所以需要处理的边数就是最终的答案啦。

J - Minimum spanning tree for each edge

如果你在 E 在线那么这题就是双倍经验。。不过不知道为啥这题配放 J 哦。

根据 F 题的结论,在这题中,这条边一定是替换且恰好替换(如果本来就在最小生成树里面的话,替换自己不也叫替换嘛 OvO)一条最小生成树中的边的情况,所以我们要做的就是找出最小生成树里能用来替换的边。

首先把最小生成树跑出来并建出来,然后加入当前这条边之后一定是一个基环树,并且环上一定有当前这条边。环呢,其实就是 \(u \to \text{LCA}(u,v) \to v \to u\) 罢了,而我们要用环上除新加边外的权值最大的来被新边替换,这样一定能最小化新边所处树的权值(不然就不是最小了喵),所以就是一个路径 \(\max\)。当然是用树剖解决了(?,好吧开玩笑的,倍增即可。

K - Envy

还比较好玩的一个题目。

首先你需要用到一个大概率在做或想 E/F/H/J 时就已经想出来了的简单小结论,就是对于同一权值的边,它们加不进去一定是因为已经连通。也就是说,换句话说,在只考虑 \(\le val\) 的边时,不同的最小生成树中,任何两个点之间的连通性一定是同样的(要么在所有树中都不连通,要么在所有树中都连通)。这个证明过于显然懒得讲。

所以不同权值是可以分开考虑的,那么我们就先把原图的最小生成树跑出来,并记录每条边在只考虑小于这条边的边权的边的情况下这条边的两个端点所在连通块(方便后面放在一起考虑)的编号,询问的时候直接不同权值分开考虑(需要还原并查集呐)判环(也就是有没有不能加进去的边)即可。

反正就挺有意思的对吧喵。

总结

感觉 Prim 就是个没啥用的东西嘛 QAQ,几乎所有的最小生成树都是 Kruskal,并且最坏情况下 Kruskal 也就是比 Prim 多了个 \(\log\) 而已,所以几乎不影响什么呃。不过我对 Prim 确实也很不熟悉喵。

Kruskal、最小生成树什么的不都是一个工具,板子贺来贺去的就可以了,但是中间所蕴含的一些性质一些思维还是比较有趣的。

然后因为我写总结的时候一直在听歌并且上头了所以在这里塞点私货 AwA。

人は猫 dala-da-da-da
Pico bala-ba-ba-ba
Bibo bala-ba-ba-ba

绝対にそう ny-ny-nya-nya-nya
Dido bala-ba-ba-ba
nino na-ra-na-na-na

说白了泡面 辣条 充电线
它们本质上就是
罐头 猫条 毛线球
无论说得多上流

猫咪就是喜欢装模作样
大模大样 装得像模像样
觉得我们多高尚 它们多低档
到头来还不是一模一样

这独来独往的身影
和那目中无人的神情
这无法无天的行径
似曾相识

人是猫就是很好听啊喵。!

posted @ 2026-08-16 20:28  嘎嘎喵  阅读(49)  评论(3)    收藏  举报