某道多解的图论题

这道题好像挺不错的——至少在解法的多样性上,是很令人感到惊讶的。

问题

问题:给图 T=(V,E) 其中 V={1,2,,n},额外添加点 0 和边 E={(0,i,ai)} 即每个点 i0 之间连权值为 ai 的边。动态修改 ai,请维护图的最小生成树的边权和。

显然 T 只用保留 MST,故后文假定 T 是树。令 G 为新图 (V{0},EE)

解法一

考虑发掘 T 是树的特点。我们惊讶地发现 G 是平面图。

几何的证明:按照 dfs 序连边,顺便划分平面。—— crashed

代数的证明:考虑图拟阵的对偶拟阵,可以发现其为图拟阵,因此原图为平面图。

因此我们用经典方案,两个 LCT 分别维护原图和对偶图(对偶拟阵)即可。

然而这玩意儿实际运行效率直逼 O(nlog2n) 做法,故不予考虑。

解法二

优化 解法一G 不仅是平面图,而且是由树 T 导出的。

研究一下对偶拟阵:树边变为了连接子树内 dfs 序的 (min1)max 。显然它仍然满足树的形状,可以树形 dp 求答案。具体式子就不列了。

动态 dp 与全局平衡二叉树使得其复杂度为 O(nlogn)

然而对偶应该保持其复杂性不变,因此从正向角度也应该有树形 dp 方案。

树形?也就是说,本题不是图论,而是树论?从 T 的角度考虑,容易想到 MST 实际上是将 T 划分为若干连通块,每个连通块内选择 mina 罢了。

由此也可以 dp,应该得到卷爷的做法

解法三

解法二dp 的侧重点是连通块,选 a 是附带。换个角度,就是以选 a 为侧重点,不难想到接下来划分连通块的方案是 kruskal

T 建立 kruskal 重构树 T,则 T 的每个子树(代表连通块)只有两种状态:其内有 a 被选(因此每个点都与 0 连通),或其内无 a 被选(则该子树包含的边都被使用)。

这同样得到简单 dp 。改成 ddp 是顺着时间轴维护树形信息。

如果顺着树形结构,维护时间轴信息,应该大致得到校长的做法,但我不确定。

解法四

可以让代码更好写。

注意到每个 a 管辖某个 T 上子树,考虑将问题放到 dfs 序上,变为每个 a 直接去管辖任意 dfs 序区间(不要求对应 T 子树)。

这样不改变最优解。因为 dfs 序的选取不是 T 子树时,相当于用了 T 的较高级(深度较小)的边(权值较大)来接管原本用较低级边连通的连通块。

在线段树上不难维护该问题最优解——记录该区间期望被哪一侧的 a 管辖即可。这样就得到妹妹的做法(然而没有链接😄)。

妹妹表示自己从 T 是链的角度出发,直接考虑给连通块选取 “等价链”,就得到该做法。我只能说 沐目女未 卡哇伊!

posted @   OneInDark  阅读(104)  评论(1编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下
点击右上角即可分享
微信分享提示