1. 程式人生 > >支配樹學習筆記

支配樹學習筆記

沒有 回來 tar 樹邊 學習筆記 sem 定義 關系 祖先

沒有施工完,先放上來。

支配樹

求出dfs序。

定義:\(y\)\(x\)的半支配點,當且僅當存在一條\(y\rightarrow x\)的路徑,且這條路徑掐頭去尾之後都有\(dfn>dfn_x\),且\(y\)為滿足這個條件的\(dfn\)最小的點,記為\(semi_x=y\)

\(fa_x\)顯然滿足條件,所以有\(dfn_y\le dfn_{fa_x}\)

定理:\(y\rightarrow x\)的路徑必然經過\(lca(x,y)\)

感性理解一下就好了qwq

由這個定理,可以得到\(y\)必定為\(x\)的祖先。

(為了寫的方便,下文有的時候半支配點指滿足條件但不是最小的點)

如何求\(semi_x\)

分情況討論:要麽是\(semi_x\)一步走到了\(x\);要麽是\(semi_x\)先跳到了\(x\)的兄弟節點那裏,然後再亂跳一通跳回來;要麽是\(semi_x\)跳到了\(x\)的子樹內,然後在子樹內晃來晃去,最後跳回來。

第一種

建反圖之後亂搞即可。

第二種

\(w\)\(semi_x\rightarrow x\)路徑上的第一個點,那麽就會有\(semi_x=semi_w\)

證明:\(semi_w\)顯然滿足\(x\)的條件。若\(semi_x<semi_w\),那麽會發現\(semi_x\)滿足\(w\)的條件,於是\(semi_w\)不是\(w\)

最小的半支配點,矛盾。

所以\(semi_x\ge semi_w\),所以\(semi_x=semi_w\)

第三種

其實與第二種一模一樣qwq

\(semi_x\)有什麽用?

把非樹邊全都刪掉,加上\((semi_x,x)\)的邊,支配關系不變。

證明?感性理解一下吧qwq

然後這個圖變成了一個DAG,\(O(n\log n)\)亂搞就好了。

支配樹學習筆記