支配树

定义

称有向图上 \(k\) 为 \(t\) 以 \(s\) 为源点的支配点,当且仅当 \(s\to t\) 的所有路径必须经过 \(k\),即删掉 \(k\) 后 \(s,t\) 不连通。

显然 \(t\) 的所有支配点被一条链穿过。

若连边 \(t\) 与 \(t\) 最近的支配点(\(\text{IDOM}_t\)),显然构成一棵树,称其为支配树。

对该图求出 DFS 树 \(T\),称 \(t\) 的半支配点(\(\text{SEMI}_t\))为 \(k\),存在一条路径 \(k\to c_1\to c_2\to \cdots\to t\),\(\text{DFN}_{c_i}>\text{DFN}_t\),且 \(\text{DFN}_k\) 最小,也就是 \(t\) 在反图上沿着 \(\text{DFN}>t\) 的点走,走到的 \(\text{DFN}\) 最小的点。

性质

具体性质及其证明可以见 https://www.luogu.com.cn/blog/Wankupi/solution-p5180。

补充一条:如果 \(v\) 关于 \(u\) 不是一个合法的 \(\text{SEMI}\),一定不存在一条路径不经过树边从 \(v\) 到达 \(u\)。

SEMI 求解

枚举一条边 \(v\to u\),

  • 若 \(\text{DFN}_v<\text{DFN}_u\),以 \(v\) 更新。
  • 否则,枚举 \(t\) 是 \(v\) 的祖先,\(\text{DFN}_t> \text{DFN}_u\),以 \(\text{SEMI}_t\) 更新。

IDOM 求解

抽出一条链 \(\text{SEMI}_u\to u\)(不包含 \(\text{SEMI}_u\)!),设 \(d\) 为这条链上 \(\text{SEMI}\) 的 DFS 序最小的结点。

  • 若 \(\text{SEMI}_d = \text{SEMI}_u\),\(\text{IDOM}_u=\text{SEMI}_u\)。
  • 否则有 \(\text{SEMI}_d<\text{SEMI}_u\),\(\text{IDOM}_u=\text{IDOM}_d\)。
posted @ 2023-05-16 12:47  Network_Error  阅读(37)  评论(0)    收藏  举报