1. 程式人生 > 其它 >最大權閉合子圖與最大密度子圖

最大權閉合子圖與最大密度子圖

最大權閉合子圖

問題

給定一個有向圖,點有點權(有正負),從中選出一個子圖的點權和最大並且滿足對於每一條有向邊 \((u,v)\) ,若 \(u\) 在子圖內則 \(v\) 必須在子圖內部。

解法

考慮每一個點最後必然只存在於兩種情況之中——在或不在最大權閉合子圖中。因此我們考慮使用最小割,將位於最大權閉合子圖中的點與 \(S\) 位於一個集合之中,否則與 \(T\) 在一個集合之中。

那麼顯然可以建邊 \((S,u,val_u)\) ,表示割掉這條邊我們就放棄這個點的權值。同時對於原圖上的有向邊,我們令其邊權為 \(+\infty\) 。同時每一個點向匯點連去一條 \((u,T,0)\) 的邊,表示分到和 \(S\)

一組不會損失權值。

但是考慮到權值可能存在負數,所以我們利用一個預流的 \(\text{trick}\) ,即先將 \(S\rightarrow u\rightarrow T\)\(-val_u\) 的流量,同時將我們一開始的總權值減去對應的流量。轉化之後我們相當於對負權點建 \((S,u,0)\)\((u,T,-val_u)\) 兩條邊,答案就是所有正權點的和減去該圖的最小割。

最大密度子圖

問題

給定一張無向圖,邊有邊權,點有點權,選出一個邊集 \(\mathbb E\) ,令 \(\mathbb V\) 為邊集中點對應的點集,最大化下式:

\[\text{res}=\frac{\sum_{e\in\mathbb E}val_e}{\sum_{u\in\mathbb V}val_u} \]

解法

考慮這個問題是一個很類似於 \(01\) 分數規劃的東西,我們嘗試用類似的解法來做,考慮二分這個答案 \(\text{mid}\)

\[\sum_{e\in\mathbb E}val_e\ge \text{mid}(\sum_{u\in\mathbb V}val_u)\\ \sum_{e\in\mathbb E}val_e-\text{mid}(\sum_{u\in\mathbb V}val_u)\ge 0\\ \]

所以我們要使得

\[\sum_{e\in\mathbb E}val_e-\text{mid}(\sum_{u\in\mathbb V}val_u) \]

最大。

演算法一

考慮到我們前面的最大權閉合子圖,發現我們這裡需要滿足邊選擇了,點就必須選。我們就給每一條邊和點建出對應的點,並做最大權閉合子圖即可。

演算法二

誘導子圖最小割。(不會)