bzoj1497 NOI2006 最大收益

2021-07-25 19:33:08 字數 738 閱讀 3796

最小割 思路比較簡單

點數看起來很多但是因為是類似二分圖的東西所以跑的比較快

源點對每個使用者連容量為收益的邊 使用者向中轉站連容量無窮大的邊 中轉站向匯點連容量為成本的邊

要麼割掉使用者帶來的收益 要麼割掉成本

#include 

#include

#include

using namespace std;

const int n=60005,m=n*6,s=n-1,t=n-2,inf=1e9;

int n=0,m=0;

int head[n],to[m],c[m],f[m],next[m],edge=0;

int ans=0;

intq[m],front=0,back=0,d[n],cur[n];

inline void addedge(int u,int v,int ac)

inline void build()

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

}inline int bfs()

}}

return d[t]!=-1;

}inline int dfs(int

x,int t)

}if (t)

d[x]=-1;

return flow;

}inline void dinic()

}int main(void)

BZOJ1497 NOI2006 最大獲利

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

bzoj 1497 NOI2006最大獲利

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

BZOJ 1497 NOI2006 最大獲利

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