如何在 DAG 中找多個點的 LCA

時間 2021-06-01 20:01:30

1樓:阮行止

如果允許離線,整個問題可以做到 的複雜度。

先考慮這個問題在樹上的版本。

(還用這個問題出了一道胡策 HNSDFZ #7 ……捂臉 【這是題面】

【這是題解】)

先說結論:樹上多個點的LCA,就是DFS序最小的和DFS序最大的這兩個點的LCA。

例如,在下圖的樹中,(2,4,6,7)的LCA就是(2,7)的LCA。

以下是這一命題的證明:

DFS序只存在包含的關係,不存在相交的關係。如下圖所示。

假設有三個點,DFS序分別為a,p,b且a這是因為:兩個點的LCA,就是最近的同時包含它們的那個區間所代表的點。既然LCA(a,b)的區間包含了a和b,那也一定包含了位於a和b之間的p。

因此,對於每任意三個點,只需要儲存DFS序最大和最小的點。這個點集的LCA,也就是整個點集DFS序最小的和DFS序最大的這兩個點的LCA。

既然知道了這個結論那就很好辦了。

詢問一大堆點的LCA,其實就是詢問兩個點的LCA,隨便寫個什麼東西問題就解決了。

那麼現在如何應用到DAG上?

一位匿名使用者給出了做法:建立這個DAG的支配樹,然後DAG上的LCA就被轉化成了樹上的LCA。於是就可以用上面的演算法解決問題。

如何在同一U盤中安裝多個系統?

U盤分兩個區,自己建立乙個ESP分割槽,外加乙個NTFS分割槽放多系統的VHDX檔案。使用BOOTICE工具編輯引導。不知道這種方法能不能滿足需求。 補天芯資料恢復 同意金滿堂的回答,可以把U盤量產為硬碟模式。補充乙個,雙系統不論是裝U盤還是硬碟,都需要單獨分割槽,乙個系統放乙個分割槽。如果不知道如...

excel如何在多個不同內容的單元格中僅提取數字?

可以通過函式SUMIFS或者VBA自定義函式實現公式 SUMIF A2 E2,0 A2 E2 自定義函式 Function SumNum rng As Range Dim current As Range For Each current In rngIf IsNumeric current.Tex...

如何在繁忙的生活中創造一點驚喜?

暮光 1.學佛的重點應放在改變自己的性格 看法 2.心中隨時都應保持向善 光明 歡喜,讓周圍的人感受到光明與淨土 內容 但是有時候會使人引起誤會,以為只注意臨命終那一點而已,其實並非如此。應該把這一點看成如同乙個學生畢業考的那段時間一樣。然而乙個學生的學生時代,並非僅由畢業考的那段時間來決定他的一切...