前言:近期在複習這些東西,就xjb寫一點吧。固然之前也寫過,但此次偏重不太同樣html
最小瓶頸路:u到v最大權值最小的路徑。在最小生成樹上。是次小生成樹的一個子問題qwqspa
最小極差生成樹:枚舉最小生成樹上的最小權值的大小code
應用:htm
low[u]定義爲u子樹中的點經過back edge和cross edge能達到的時間戳最小的點v的時間戳,且知足v能到達u(即v不在其餘已經肯定的SCC中)blog
if(!dfn[v]) { dfs(v); low[u] = min(low[u], low[v]); } else if(!belong[v]) low[u] = min(low[u], dfn[v]);
low[u]定義不變,因爲是無向圖因此u和父親的連邊就是tree edge,即v不能夠是父親排序
而後要特判根的時候,至少倆孩子才能夠get
PS:刪點變樹,不能刪割點class
之前的變量
每一個變量有兩個取值(x,x'),有一些條件限制了某兩個變量不能同時取某個值。即「或」。時間戳
對於限制(a,b),連有向邊(a,b'),(b,a')
a -> b 意味着a成立時b必須成立
選擇一個沒有賦值的變量x,賦值爲真,而後dfs染色下去,衝突則無解(x和x'都爲真)
應用:
判斷某個變量在該系統中是否可取真:
今後變量開始dfs便可
求字典序最小的解:
從小到大,先賦值真染色,衝突的話把此次染色回滾掉,再賦值假染色
就是說進行x時,1...x-1時dfs染色的結果還保留着
複雜度:最壞\(O(nm)\)
優點在於咱們擁有決定一個變量取值的能力
原圖有對稱性
顯然一個scc中的點要麼都選要麼都不選,x和x'在同一個scc中則無解
縮點,反向連邊
進行拓撲排序,選第一個未染色的點,染白色,而後將否認點及其新圖後代dfs染黑色(注意邊是反向的,因此一個點爲假那麼他的後代必定爲假)。重複此過程。
複雜度:\(O(m)\)
侷限性很強,只能判斷是否有解和構造一組解
字典序最小的解也不可作,由於toposort中不斷加入ind=0的新點,標號更小的點能夠是後加入的(但這時這個點可能已經由於以前的煞筆操做而被染成黑色了)