bzoj 1497 NOI2006最大獲利

2021-07-25 12:43:39 字數 878 閱讀 3450

我對題意的理解:給出一堆公司和一堆使用者,我們買公司需要花錢,每個使用者會支付報酬當且僅當他所鍾愛的兩個公司我都買了,問最大獲利

最大權閉合子圖= =好厲害的樣子 首先我們連邊最小割ans 答案就是sum-ans 這個可以想,sum表示在不需要支出的情況下的獲利,現在我們需要支出,所以要跑一遍最小割。感覺就是 我們掙的錢可以通過乙個途徑跑掉,就掙不到,但是乙個途徑跑掉的錢是有限的。(怎麼會有我這麼愚蠢的理解呢) 建立源s,匯t 然後由s向所有使用者連長度為報酬的邊,使用者向喜歡的公司連inf(表示一些瘋狂的女人為了買衣服會花好多好多錢),然後公司向匯點連長度為**的邊。看著好奇怪啊,但是我想明白啦!

#include#include#include#include#include# define inf 1e9

using namespace std;

const int maxn=600000;

struct nodetable[maxn<<2];

int tot=1,head[maxn];

void add(int a,int b,int c)

; head[a]=tot;

table[++tot]=(node);

head[b]=tot;

}int n,m,s,t,a[maxn],ans,sum;

int q[maxn],h,t,d[maxn];

bool bfs()

} return !!d[t];

}int dfs(int x,int f)

return cnt;

}int main()

int a,b,c;

for(int i=1;i<=m;i++)

while(bfs()) ans+=dfs(s,inf);

cout<

BZOJ1497 NOI2006 最大獲利

什麼是最大權閉合子圖 先解釋一下有向圖的閉合圖 閉合圖內任意點的任意後繼也一定還在閉合圖中。物理意義 事物間依賴關係 乙個事件要發生,它需要的所有前提也都一定要發生。最大權閉合圖 點權之和最大的閉合圖 最大權閉合圖構圖方法 1.增加源s匯t 2.源s連線原圖的正權點,容量為相應點權 3.原圖的負權點...

bzoj1497 NOI2006 最大收益

最小割 思路比較簡單 點數看起來很多但是因為是類似二分圖的東西所以跑的比較快 源點對每個使用者連容量為收益的邊 使用者向中轉站連容量無窮大的邊 中轉站向匯點連容量為成本的邊 要麼割掉使用者帶來的收益 要麼割掉成本 include include include using namespace std...

BZOJ 1497 NOI2006 最大獲利

傳送門 經典的網路流 割邊表示捨棄該價值,所以可以把使用者群的收益連向一邊,建站的費用連向一邊,中間把對應點連inf 這樣的最小割就是最小捨棄的價值,加上總獲利就是最大獲利了 include include include define cint const int define inf 23333...