hdu 4292 拆點 簡單網路流

2022-09-03 03:21:10 字數 800 閱讀 8802

這題拆點一開始沒想明白。

原本的思路是 源點與食物相連,食物與人相連,人與飲料相連,飲料與匯點相連。。

這樣就貌似做到了最大流的求法了,但是這樣就會出現乙個問題,同乙個牛可以選擇多次的問題,因此需要給每頭牛給上乙個容量為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 ...