某道多解的图论题
这道题好像挺不错的——至少在解法的多样性上,是很令人感到惊讶的。
问题
问题:给图 \(T=(V,E)\) 其中 \(V=\{1,2,\dots,n\}\),额外添加点 \(0\) 和边 \(E'=\{(0,i,a_i)\}\) 即每个点 \(i\) 与 \(0\) 之间连权值为 \(a_i\) 的边。动态修改 \(a_i\),请维护图的最小生成树的边权和。
显然 \(T\) 只用保留 \(\rm MST\),故后文假定 \(T\) 是树。令 \(G\) 为新图 \((V\cup\{0\},E\cup E')\) 。
解法一
考虑发掘 \(T\) 是树的特点。我们惊讶地发现 \(G\) 是平面图。
几何的证明:按照 \(\rm dfs\) 序连边,顺便划分平面。—— \(\textsf{crashed}\)
代数的证明:考虑图拟阵的对偶拟阵,可以发现其为图拟阵,因此原图为平面图。
因此我们用经典方案,两个 \(\textit{LCT}\) 分别维护原图和对偶图(对偶拟阵)即可。
然而这玩意儿实际运行效率直逼 \(\mathcal O(n\log^2n)\) 做法,故不予考虑。
解法二
优化 解法一
:\(G\) 不仅是平面图,而且是由树 \(T\) 导出的。
研究一下对偶拟阵:树边变为了连接子树内 \(\rm dfs\) 序的 \((\min-1)\) 和 \(\max\) 。显然它仍然满足树的形状,可以树形 \(\tt dp\) 求答案。具体式子就不列了。
动态 \(\tt dp\) 与全局平衡二叉树使得其复杂度为 \(\mathcal O(n\log n)\) 。
然而对偶应该保持其复杂性不变,因此从正向角度也应该有树形 \(\tt dp\) 方案。
树形?也就是说,本题不是图论,而是树论?从 \(T\) 的角度考虑,容易想到 \(\rm MST\) 实际上是将 \(T\) 划分为若干连通块,每个连通块内选择 \(\min a\) 罢了。
由此也可以 \(\tt dp\),应该得到卷爷的做法。
解法三
解法二
的 \(\tt dp\) 的侧重点是连通块,选 \(a\) 是附带。换个角度,就是以选 \(a\) 为侧重点,不难想到接下来划分连通块的方案是 \(\texttt{kruskal}\) 。
对 \(T\) 建立 \(\texttt{kruskal}\) 重构树 \(T'\),则 \(T'\) 的每个子树(代表连通块)只有两种状态:其内有 \(a\) 被选(因此每个点都与 \(0\) 连通),或其内无 \(a\) 被选(则该子树包含的边都被使用)。
这同样得到简单 \(\tt dp\) 。改成 \(\tt ddp\) 是顺着时间轴维护树形信息。
如果顺着树形结构,维护时间轴信息,应该大致得到校长的做法,但我不确定。
解法四
可以让代码更好写。
注意到每个 \(a\) 管辖某个 \(T'\) 上子树,考虑将问题放到 \(\rm dfs\) 序上,变为每个 \(a\) 直接去管辖任意 \(\rm dfs\) 序区间(不要求对应 \(T'\) 子树)。
这样不改变最优解。因为 \(\rm dfs\) 序的选取不是 \(T'\) 子树时,相当于用了 \(T'\) 的较高级(深度较小)的边(权值较大)来接管原本用较低级边连通的连通块。
在线段树上不难维护该问题最优解——记录该区间期望被哪一侧的 \(a\) 管辖即可。这样就得到妹妹的做法(然而没有链接😄)。
妹妹表示自己从 \(T\) 是链的角度出发,直接考虑给连通块选取 “等价链”,就得到该做法。我只能说 沐目女未 卡哇伊!
如果这篇文章对你有帮助,那么作者是:OneInDark,原文在:https://www.cnblogs.com/OneInDark/p/16504451.html,否则我也不知道这是谁的文章。