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