這題拆點一開始沒想明白。
原本的思路是 源點與食物相連,食物與人相連,人與飲料相連,飲料與匯點相連。。
這樣就貌似做到了最大流的求法了,但是這樣就會出現乙個問題,同乙個牛可以選擇多次的問題,因此需要給每頭牛給上乙個容量為1的限制條件,那就是拆點啦!~
**:#include#include#include#define maxn 815
#define inf 1e8
#define min(a,b) (ab?a:b)
using namespace std;
struct edge
e[200000];
int head[maxn],ecnt;
int gap[maxn],cur[maxn],pre[maxn],dis[maxn];
int l,r,mid;
int n,m,scr,sink,vn,num;
int k,c1,m;
void insert(int u,int v,int w)
int sap(int s,int t,int n)//核心**(模版)
gap[s]=n;
bool flag;
while(dis[s]0&&dis[u]==dis[v]+1)
aug=inf;
}break;//找到一條就退出}}
if(flag) continue;
int mindis=n;
for(i=head[u];i!=-1;i=e[i].next)
{v=e[i].v;
if(e[i].w>0&&dis[v]
hdu 4292 拆點 最大流)
思路 為了控制乙個人只連一瓶飲料,乙份食物,那麼我們可以把乙個人拆成兩個,他們之間連一條權值為1的邊,另外左邊連它喜歡的食物,權值為1,右邊連它喜歡的飲料,權值為1,在起點連食物的時候加流量限制,終點加流量限制,跑一遍最大流即可。1 include2 include3 include4 using ...
hdu 4292 拆點 最大流)
思路 為了控制乙個人只連一瓶飲料,乙份食物,那麼我們可以把乙個人拆成兩個,他們之間連一條權值為1的邊,另外左邊連它喜歡的食物,權值為1,右邊連它喜歡的飲料,權值為1,在起點連食物的時候加流量限制,終點加流量限制,跑一遍最大流即可。1 include2 include3 include4 using ...
hdu 4292 Food 拆點網路流
解法 拆人 include include include include include include include include include include include include include include include include include include ...