#23736: DSU 解法


rollfc (胖胖貓)

學校 : 國立清華大學
編號 : 81012
來源 : [36.229.53.168]
最後登入時間 :
2024-11-23 00:27:58
c889. 2. 二分圖 -- 107學年度全國資訊學科能力競賽 | From: [61.222.86.91] | 發表日期 : 2020-12-14 17:04

觀察一下大部份AC的記憶體空間耗量,應該透過 DFS 方式做二分圖的連通,這個方法需要儲存"邊的關係。

這邊提供 DSU 處理「連通」的角度,方法類似 f310: 10158-war 這題當中處理「敵對關係」。

能夠拆分成二分圖的點可以視為不同的兩個群且某群內的點只會和另一群的點連通( 敵對關係 ),

處理一條邊時是可以視為設定兩個相鄰的點為敵對關係,所以出現矛盾時 = 無法構成二分圖。

能形成二分圖時,則加總每群源頭最大的數量(朋友數量和敵人數量選擇最多的那群)。

這個方法的優勢是不需要儲存"邊",記憶體耗量會下降,缺點是可以求出最大覆蓋的塗黑點數的前題是必能形成二分圖,

作為對比 d286-00193 Graph Coloring 只能透過剪枝加速完成,DSU 是無法套用在這題的(應該吧?)。

 

 
#23737: Re:DSU 解法


rollfc (胖胖貓)

學校 : 國立清華大學
編號 : 81012
來源 : [36.229.53.168]
最後登入時間 :
2024-11-23 00:27:58
c889. 2. 二分圖 -- 107學年度全國資訊學科能力競賽 | From: [61.222.86.91] | 發表日期 : 2020-12-14 17:24

這個方法的優勢是不需要儲存"邊",記憶體耗量會下降 ... 這點有誤,邊的問題應該不是主因。

更正一下應該是不需要透過遞迴來搜尋同一個連通圖內所有點的關係才對,遞迴本身會佔走大量的記憶體。

 
ZeroJudge Forum