P4174 NOI2006 最大獲利

2022-02-27 07:43:26 字數 1596 閱讀 6723

最小割看很多人都是用最大權閉合子圖來做的,其實就是對於每個使用者、節點都建立點,然後使用者是正權(獲得收益),通訊節點是負權(需要成本),然後使用者向所需要的節點連邊,表示如果想得到這個正權,就必須把所需的負權節點也選上:也就是所選子圖必須閉合

所以就用常規的做法,建模成網路流,\(s\) 向所有節點連流量為成本的邊,使用者向 \(t\) 連流量為收益的邊,使用者與節點的邊流量為無窮大,就可以最小割了

但這種連邊方式還有一種理解,就是割點 \(s\) 和節點的邊代表建立這個節點,損失這些成本,割掉使用者和 \(t\) 的邊代表放棄這個使用者,損失這些收益

然後對於乙個使用者和它需要的節點,不能既不建立節點、也不放棄這個使用者(就是和 \(s,t\) 的邊分別都保留),所以要在它們之間連流量無窮的邊,割不掉,表示矛盾

這是基於用流量無窮表示矛盾的一種做法

還有一種連邊方式不同的,是基於表示兩點之間的關係

先考慮某兩個節點 \(x,y\),有乙個使用者 \(i\) 需要它們兩個

顯然,乙個點不能同時和 \(s,t\) 相連,需要割掉一些邊(也不可能都不相連,這樣不是最小割),我們設與 \(s\) 相連表示這個節點要建立,與 \(t\) 相連則不建立。然後有四種可能

那麼解上面的方程,得到 \(a=b=e=\dfrac,c=p_x,d=p_y\)

那麼將其推廣到有 \(n\) 個節點的情況,就是每個節點向 \(t\) 連流量是 \(p_i\) 的邊;從 \(s\) 向每個節點連所有需要它的使用者的 \(c\) 值之和的一般的邊;使用者所需的兩個點互相連流量 \(\dfrac\) 的雙向邊

為了避免出現浮點數,可以把所有權值都乘二

這種方法還是從16年集訓隊**裡看的,但不是這個題

不過這樣做也有一定的侷限性,就是使用者只能同時需要兩個節點,多了就不行了

**是第二種方法的

#include#include#include#include#include#include#include#define reg register

#define en puts("")

inline int read()

while(c>='0'&&c<='9')

return y?x:-x;

}#define n 5006

#define m 300006

struct graph

}g;int n,m,s,t;

int deep[n];

int left,right,que[n];

inline int bfs()

} return 0;

}long long dfs(reg int u,long long now=1e18)

return now-res;

}inline long long dinic()

return ans;

}long long sum[m];

int main()

for(reg int i=1;i<=n;i++) g.add(s,i,sum[i]);

n+=2;

printf("%lld\n",(all-dinic())>>1);

return 0;

}

P4174 NOI2006 最大獲利

洛谷傳送門 題意 有n個中轉站建造方案,每個中轉站有乙個建造的費用,有m個使用者群,每個使用者群能帶來一定的收益,但是每個使用者群都會指定兩個中轉站必須建造,問最大可能收益 思路 最大權閉合圖 定義 在有向圖中,每個點有乙個權值,取乙個點集,使得沒有乙個點有向外指的邊,這樣的權值最大的點集。可以發現...

洛谷P4174 NOI2006 最大獲利

新的技術正衝擊著手機通訊市場,對於各大運營商來說,這既是機遇,更是挑戰。thu 集團旗下的 cs t 通訊公司在新一代通訊技術血戰的前夜,需要做太多的準備工作,僅就站址選擇一項,就需要完成前期市場研究 站址勘測 最優化等專案。在前期市場調查和站址勘測之後,公司得到了一共 n 個可以作為通訊訊號中轉站...

luoguP4174 NOI2006 最大獲利

獲得一條邊的價值必須選上兩點,這一看就是最大權閉合子圖。先將所有價值選上。從 s 向每個使用者 i 連容量為 c i 的邊,從每個中轉站 i 向匯點連容量為 cost i 的邊,對於每個使用者 i 從 i 向 a i 和 c i 連容量為 inf 的邊。之後跑最小割,用答案減去即可。code inc...