支配樹(滅絕樹) 學習筆記

2022-05-01 19:57:12 字數 2586 閱讀 2709

在飛機上的時候理解了一下這個演算法,這裡寫一下吧。本來以前一直以為是個\(h_2o\)演算法(其實也是),結果發現一些證明還是很有意思的。

對於乙個給定圖,我們有如下定義:

我們稱\(u\)為\(v\)的支配點當且僅當在原圖中刪去\(u\)之後從根節點出發無法抵達\(v\)。

我們稱\(u\)為\(v\)的半支配點當且僅當\(u\)存在一條到\(v\)的路徑使得該路徑除去\(u,v\)所有節點的\(dfn\)都大於\(dfn[v]\),且\(u\)在滿足條件的點集中\(dfn\)最小。

為了方便,我們稱點\(u\)的半支配點為\(sdom[u]\),支配點為\(idom[u]\)。

這個演算法主要是解決支配之類的問題。例如乙個點支配多少個點,乙個點被多少個點支配之類的。

對於這個問題我們可以建起一棵樹,滿足點\(u\)支配的點都在\(u\)的子樹內。

於是問題就是如何建起一棵支配樹,據說這個還叫滅絕樹(奇怪的名字增加了!!!)

很顯然,對於一棵樹,該樹的支配樹就是它本身。

很顯然,我們可以直接把點\(u\)連在\(lca(v_1,v_2,...)\)的下面,其中存在邊\(v_1,v_2,...\to u\)。

時間複雜度\(\theta(n\log n)\)。

例題: [zjoi2012]災難

對此,我們\(\text \)老爺子和\(\text \)提出了一種名為\(\text \)的演算法,可以在\(\theta(n\log n)\)的時間複雜度內建好樹,當然,更確切的來說是\(\theta(n\alpha (n))\)。

我們發現似乎我們直接求支配點不是很好求,我們考慮如何求出半支配點。

我們發現對於當前節點\(u\),如果有邊\(v\to u\),且\(dfn[u],那麼在不考慮\(dfn\)最小的情況下,一定\(sdom[v]\)為\(u\)的半支配點。

證明直接感性一下,發現顯然,直接根據定義就可以知道正確性。

而且半支配點還有乙個性質,就是乙個點的半支配點的\(dfn\)一定不會比該點大,這個下面的**證明會用到,但是我似乎並沒有寫出來,讀者明白就好。

然後這裡就有乙個\(\theta(n\log n)\)的方法誕生了。我們發現如果刪掉原圖中非\(dfs\)樹的邊,再對於\(\forall u\),連上\(sdom[u]\to u\),不會改變原圖的支配關係。

正確性這裡感性證明一下,對於\(u,v\),如果在原圖中\(u\)並不支配\(v\),那麼,如果在\(dfs\)樹中\(u\)不是\(v\)的祖先,那顯然滿足,否則的話,我們可以從\(sdom[v]\)走到\(v\)。如果原圖中\(u\)支配\(v\)的話,很顯然,在\(dfs\)樹中\(u\)是\(v\)的祖先,因為無論怎麼走都得先經過\(u\)。那麼顯然\(u\)還支配\(v\)。

於是,我們就把這個圖變成了乙個\(\text \),就可以用上面的方法\(\theta(n\log n)\)做出來了。

但是,這並不滿足我們對**複雜度的渴望。乙個小小的思想在我們腦海中劃過:我們是否可以用\(sdom\)求出\(idom\)?答案是肯定的。為了方便,我們假設我們已經把圖變成乙個\(\text \)了。

我們分兩種情況考慮:

我們設\(z\)為\(sdom[x]\to x\)路徑上\(dfn[sdom[z]]\)最小的點

如果\(sdom[z]=sdom[x]\)

則\(idom[x]=sdom[x]\)

這個應該很顯然吧。。。**理解的話就是因為不可能有其他點通過\(sdom\)邊走到\(sdom[x]\to x\)的路徑上,因為這條路徑上\(dfn[sdom[z]]\)最小值也不過\(sdom[x]\)。

否則\(idom[x]=idom[z]\)

我們採用反證法來感性證明一下:

我們假設刪去\(idom[z]\)之後仍可達\(idom[x]\),那麼說明\(idom[z]\)的某個祖先可以通過\(sdom\)邊走到\(idom[z]\to x\)這條路徑上的某個點,但是我們發現\(idom[z]\)必定是\(sdom[z]\)的後代,而\(sdom[z]\to z\)這條路徑上\(dfn[sdom[z]]\)最小也不過\(z\),所以矛盾,證畢。

於是,我們可以用並查集維護\(sdom[x]\to x\)中\(dfn[sdom[\ \ ]]\)的最小值,我們就在\(\theta(n\alpha(n))\)的時間複雜度內解決了建樹的問題。

對了,還有最後的乙個問題沒有解決,可能細心的讀者已經發現了(似乎也木有什麼讀者),我們並沒有說明乙個點支配的點都在支配樹的子樹內。其實很好說明,我們發現我們全都是用的\(dfn\)最小的點,這就滿足充分性。

p5180 【模板】支配樹

這個題確實就是板題,就是建出支配樹後求出子樹大小。

**戳這裡開啟

給出乙個\(n\)個點\(m\)條邊的帶權無向圖,給定起點\(s\),求出乙個點使得刪去該點之後最短路變化的點數最多。

這道題其實還是比較妙的。

我們不難想到先對原圖建出乙個最短路徑圖,於是乙個點刪去產生的貢獻就是該圖中支配的點數。這個仔細想一下就會明白為什麼。

我們發現這個最短路徑圖一定是個\(\text \),因為裡面如果有環的話就不是最短路徑圖了,於是我們就可以直接用\(\text \theta(n\log n)\)解決。

於是我們就在\(\theta(n\log n+m)\)的時間複雜度內解決了這個問題。

**戳這裡開啟

滅絕樹學習小記

tags 圖論 聽這名字特別酷對吧 不像乙個noip滾粗選手能學的東西 所以只能當乙個搬運工了 orzlitble 滅絕樹和支配樹應該是一種東西 用於 o n m logn 或者 o n m alpha 求解一類如下問題 在一張捕食圖上 從捕食者向 食者有連邊 若某生物的所有食物都滅絕了,則該生物滅...

支配樹 Dominator Tree 學習筆記

因為是學習筆記所以是邊學邊寫,以防自己到時候忘掉了 w 首先,支配樹是一棵樹 廢話 用來求解必經點問題。即求乙個有向圖中以r為根到達每乙個點的必經點。樹中每乙個點x的父親為idom x 表示x的最近必經點。我們把從r到x必經y稱作 y支配x 顯然支配是具有傳遞性的。所以可以證明idom是唯一的。首先...

學習記錄 DAG上的支配樹

作用 在有向圖中,當詢問從起點到終點的路徑必須經過的點,即去掉這個點以及周圍的邊,就不能從起點到達終點的點 類似於無向圖中的割點 這時,可與通過建立支配樹來解決問題。結構 支配樹理所當然是乙個樹狀結構。圖的起點作為根節點,每乙個節點到達根節點的路徑都是必經點。如果能建立這樣的樹狀結構,那麼基本可以通...