…最小割一直很弱啊..感覺是個很正常的題目怎麼就不會做呢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.最小割 邊權和最小的割被稱為最小割.最大流 最小割定理 一張網路的最大流等於其最小割的邊權之和.這個東西太經典了這裡就不證了.二.輸出一種最小割的方案.先跑一遍最大流得到...