poj3281網路流之最大流

2022-03-16 01:34:08 字數 1201 閱讀 4548

加乙個源點和匯點,把每頭牛拆成兩個點,不拆點的話可能會出現多對食物與飲料被乙個牛享用的情況,拆點後流量為1,不能同時通過了

然後用最大流處理,每個鏈結邊都是1

#include#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define pi acos(-1)

#define ll long long

#define mod 1000000007

#define ls l,m,rt<<1

#define rs m+1,r,rt<<1|1

#pragma comment(linker, "/stack:1024000000,1024000000")

using

namespace

std;

const

double g=10.0,eps=1e-9

;const

int n=400+5,maxn=16,inf=999999

;int

c[n][n],pre[n];

bool

vis[n];

ints,t,n,food,drink;

bool

bfs()}}

return0;

}int

max_flow()

ans+=minn;

}}int

main()

while(b--)

}s=0,t=n+n+food+drink+1

;

for(int i=1;i<=n;i++)c[food+i][food+n+i]=1

;

for(int i=1;i<=food;i++)//

源點為0,匯點為n+food+drink+1

c[0][i]=1

;

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

c[n+n+food+i][n+n+food+drink+1]=1

; cout

return0;

}

view code

poj3281 網路流 EK演算法

題意 分配問題,有f種食物,d種飲料,n頭牛,每頭牛有自己喜歡的吃的和喝的東西,現在讓你去分配,使得吃喝都得到的牛最多。每種吃喝的東西只能招待一頭牛。分析 把一頭牛拆成兩頭,一頭和食物連,一頭和飲料連,當然這兩頭牛之間肯定要連一條邊,新增乙個源點匯點分別向食物和飲料連。這裡把牛拆成兩個點是為了限制進...

POJ 3281(最大流,拆點)

2014 12 20 18 05 00 思路 嘛,這題終於不是max flow果題了。因為種種限制,需要將牛進行拆點,從而限制每頭牛只能選擇一種dish和一種drink,每頭牛拆為兩點,點間建邊,容量為1。我本來是將dish拆點的,怎麼想都覺得對,後來發現如果按照牛 dish in dish out...

poj 3281 拆點 最大流

題意 有n頭牛,f種食物,d種飲料,每頭牛有自己喜歡的食物和飲料,問你最多能夠幾頭牛搭配好,每種食物或者飲料只能一頭牛享用 解題思路 把牛拆點,因為流過牛的流量是由限制的,只能為1,然後,食物和牛的入點相連,牛的出點和飲料相連,求解最大流 include include include includ...