支配树

定义

称有向图上 \(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  阅读(2)  评论(0)    收藏  举报