4177 Mike的農場 最小割

2021-07-10 10:01:52 字數 997 閱讀 8079

…最小割一直很弱啊..感覺是個很正常的題目怎麼就不會做呢qwq

首先對於每乙個點和s,

t 連邊,代表選

0 或者

1,然後如果兩個同時選有損失就將兩個之間連邊(i

,j,k

) ,因為如果i,

j 選不同的這條邊就必須割掉,如果幾個同時選有收益就新建乙個點no

w ,no

w 和對應的源點或者匯點連邊為權值,和集合中每個點連邊in

f ,這樣如果集合中的點都在裡面那麼這條邊就不用被割掉。那麼答案等於總收益-最小割。

#include

#include

#include

#define n 10005

#define m 2000005

#define inf 1000000007

using namespace std;

int n,m,k,t,cnt=1,ans,now;

int head[n],cur[n],dis[n],q[n];

intnext[m],list[m],key[m];

inline int

read()

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

return a*f;

}inline void insert(int

x,int

y,int z)

inline bool bfs()

return dis[t]!=-1;

}int find(int

x,int flow)

if (!used) dis[x]=-1;

return used;

}inline int dinic()

return ans;

}int main()

else

}cout << dinic() << endl;

return

0;}

4177 Mike的農場 最小割

最小割模型,養牛養羊可以想到跑完網路流後這個點屬於s集或者t集。然後按照這個思路就很容易建圖。源點連圍欄,流量為養牛的收入,圍欄連匯點流量為養羊的收入,然後養不同動物會造成額外損失的兩個圍欄連雙向邊流量為 k 這樣可以保證假如兩個圍欄中養了不同的動物 跑完網路流分別屬於s集和 t 集 那麼這條邊肯定...

BZOJ 4177 Mike的農場 最小割

顯然是最小割.對於規律 i,j,k i,j 互相連邊,容量為k 對於規則 s,a,b 新建乙個點x,x與s中每個點連一條弧,容量 然後再根據a決定x與源點或匯點連邊.跑最大流,用總收益減去就是答案了.挺好想的一道題.includeusing namespace std const int maxn ...

最大流最小割定理與最小割的數學模型

一.最大流最小割定理.割 對於一張網路,我們稱乙個邊集的子集為乙個割,當且僅當去掉這個邊集的子集後源點s ss無法到達匯點ttt.最小割 邊權和最小的割被稱為最小割.最大流 最小割定理 一張網路的最大流等於其最小割的邊權之和.這個東西太經典了這裡就不證了.二.輸出一種最小割的方案.先跑一遍最大流得到...