4177 Mike的農場 最小割

2021-07-10 11:54:32 字數 1045 閱讀 2373

最小割模型,養牛養羊可以想到跑完網路流後這個點屬於s集或者t集。

然後按照這個思路就很容易建圖。源點連圍欄,流量為養牛的收入,圍欄連匯點流量為養羊的收入,然後養不同動物會造成額外損失的兩個圍欄連雙向邊流量為

k ,這樣可以保證假如兩個圍欄中養了不同的動物(跑完網路流分別屬於s集和

t 集)那麼這條邊肯定被割斷。

然後處理那k條規則,每個規則都新建乙個點,如果a=

0,則源點連新建的點流量為

b ,新建的點連所有有要求的圍欄,流量為無窮。a=

1時也同樣處理,在匯點一邊新建點連邊也類似。

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define n 500005

#define mx 1e9

using namespace std;

int sc()

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

return

x*f;

}int

q[n],dis[n];

int head[n],nxt[n],lst[n],c[n];

int n,m,k,s,t,sum,tot=1;

void insert(int

x,int

y,int a,int b)

bool bfs()

return dis[t];

}int dfs(int

x,int f)

if(!ww)dis[x]=0;

return ww;

}int main()

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

else

}while(bfs())sum-=dfs(s,mx);

cout0;}

4177 Mike的農場 最小割

最小割一直很弱啊.感覺是個很正常的題目怎麼就不會做呢qwq 首先對於每乙個點和s,t 連邊,代表選 0 或者 1,然後如果兩個同時選有損失就將兩個之間連邊 i j,k 因為如果i,j 選不同的這條邊就必須割掉,如果幾個同時選有收益就新建乙個點no w no w 和對應的源點或者匯點連邊為權值,和集合...

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.最小割 邊權和最小的割被稱為最小割.最大流 最小割定理 一張網路的最大流等於其最小割的邊權之和.這個東西太經典了這裡就不證了.二.輸出一種最小割的方案.先跑一遍最大流得到...