#19466: 想法


lawrence910426@gmail.com (l4wr3nc3)

學校 : 新北市立板橋高級中學
編號 : 67988
來源 : [140.114.6.181]
最後登入時間 :
2020-11-09 14:57:43
c522. 7. 迷你細胞 -- 2017高雄市資訊學科能力複賽 | From: [203.64.161.249] | 發表日期 : 2019-10-02 15:24

比較正式的作法

> (先備知識)持久化並查集 https://blog.csdn.net/AaronGZK/article/details/51511601

開持久化線段樹去維護啟發式並查集,再對時間軸二分搜

對時間軸二分搜,如果當前時刻已經 (u,v) 已經連通了,則將時間右界移動至中心,否則將時間左界移動到中心。

1. 合併時,O(lgN lgN)

2. 查詢時,O(lgM lgN lgN)

這時間複雜度聽起來就很毒瘤><

-

離線大法才是王道

> (先備知識)預處理倍增法 LCA https://blog.csdn.net/Hanks_o/article/details/77799320

預設圖 G 空白,如果 (u,v) 連通,將查詢 (u,v) 存入代辦事項中;如果 (u,v) 不連通,在圖 G 中加入一條權重為 time 的邊。

在圖 G 上建構 dfs tree,預處理倍增法 LCA。

對於查詢兩點 (u,v) 在什麼時候開始連通,等價於在圖 G 上,從 u 移動到 LCA(u,v) ,再從 LCA(u,v) 移動到 v 上,經過所有邊權重的最大值。

路徑 P = [u -> u 的父節點 -> u 的爺節點 -> ... -> LCA(u,v) -> ... -> v 的爺節點 -> v 的父節點 -> v] 

查詢兩點 (u,v) 在什麼時候開始連通,等價路徑 P 上權重的最大值。

1. 判斷 (u,v) 連通,使用路徑壓縮式並查集 O(a(N))

2. 預處理倍增法 LCA,O(N log N)

3. 回答所有查詢,其中有 Q 個查詢,O(Q log N)

這時間複雜度聽起來就很正常><

 
ZeroJudge Forum