BZOJ 1497 NOI2006 最大獲利

2021-07-29 09:53:36 字數 693 閱讀 1012

傳送門:

經典的網路流

割邊表示捨棄該價值,所以可以把使用者群的收益連向一邊,建站的費用連向一邊,中間把對應點連inf

這樣的最小割就是最小捨棄的價值,加上總獲利就是最大獲利了

#include

#include

#include

#define cint const int &

#define inf 2333333

#define n 55005

using

namespace

std;

int tot=1,q[n],s[n],cur[n],lev[n],tm[n],ts,n,m,a,b,w,ans;

struct edgee[n*6];

inline

void push(cint u,cint v,cint c)

;s[u]=tot;

e[++tot]=(edge);s[v]=tot;

}inline

bool bfs()

int dfs(cint u,int c)

int main()

while (bfs()) for (int rt=dfs(1,inf);rt;rt=dfs(1,inf)) ans-=rt;

printf("%d",ans);

}

BZOJ1497 NOI2006 最大獲利

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

bzoj 1497 NOI2006最大獲利

我對題意的理解 給出一堆公司和一堆使用者,我們買公司需要花錢,每個使用者會支付報酬當且僅當他所鍾愛的兩個公司我都買了,問最大獲利 最大權閉合子圖 好厲害的樣子 首先我們連邊最小割ans 答案就是sum ans 這個可以想,sum表示在不需要支出的情況下的獲利,現在我們需要支出,所以要跑一遍最小割。感...

bzoj1497 NOI2006 最大收益

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