图论乱做

发布时间 2023-07-06 22:18:23作者: BreakPlus

Kruskal 及重构树的应用

考虑一个图的边权进行某种限制,可以将边权按顺序考虑,抠出最小生成树进行处理。

  1. CF1578L

考虑边权的最大生成树上走一定最优,毋庸置疑。能化简的东西尽快化简

考虑 kruskal 算法中,合并两棵子树 \(v_1,v_2\) 的情况。

我们发现如果从正在合并的这条边的左右窜来窜去不划算,因为中间这条边限制最严,不如先去一个子树完成任务,然后润过去。

以先做 \(v_1\) 为例,假设子树 \(v_2\) 的答案为 \(s_2\),两棵子树的任务价值总和分别为 \(x_1,x_2\),合并后答案为 \(S\),合并的边权为 \(w\) 那么:

  1. \(S+x_1 \le w\),你做完了 \(v_1\) 首先要通过合并的边。
  2. \(S+x_1 \le S_2\),你还要能完成 \(v_2\) 子树才行。

我们发现 (1) 条件很严,足以走完 \(v_1\) 子树。

那么合并答案就好了。


  1. P5952

首先限制条件用最小生成树没问题。但是答案应该考虑哪个?

其实整个水槽高度齐平然后被外围墙挡住这个事情不自然,我们就假设所有水位要低于当前墙的最大高度

那么合并就考虑墙两边的连通块,每一边都有“依赖这堵墙水位齐平”的贡献。很好算的。

杂题

  1. CF1473E

我是脑瘫。

直接放缩条件,一条边不算边权,一条边双倍边权即可。多记录 2 个状态,表示是否使用了不算边权/双倍边权的技能(雾)

很简单的最短路题