题解:CF1095F Make It Connected (不一样的做法)
Carey_chen · · 题解
这是一个双
我们不能一次性加入所有边,考虑使用优先队列动态的模拟 Kruscal 选边的过程。
先将优惠边全部加入队列中。
之后,我们先把以每一个节点为起点的最短非优惠边加入队列,每次使用一条非优惠边后,再加入下一条最短的边。
对
然而这样还是
考虑使用 STL 维护更多信息,对每个连通块维护一个 map,表示该连通块内节点的编号连续段。加入新边时,我们只需在 map 中找到第一个右端点不小于
参考颜色段均摊的时间复杂度证明,再结合 map 的复杂度,我们可以知道,所有查询的均摊复杂度为
合并两个集合时,我们采用启发式合并。
总复杂度为