poj 3281 拆點 最大流

2022-07-19 13:45:35 字數 712 閱讀 2311

題意:有n頭牛,f種食物,d種飲料,每頭牛有自己喜歡的食物和飲料,問你最多能夠幾頭牛搭配好,每種食物或者飲料只能一頭牛享用;

解題思路:把牛拆點,因為流過牛的流量是由限制的,只能為1,然後,食物和牛的入點相連,牛的出點和飲料相連,求解最大流

**:

#include#include#include#include#includeusing namespace std;

const int maxn=200500;

const int inf=0x3f3f3f3f;

struct edge

edge[maxn];

int n,m,f,d;

int head[maxn];

int cnt,start,end;

int x,y,w;

int depth[maxn];

void add(int u,int v,int w)

}return depth[end];//若為0表示沒法到達也就是沒有路徑了;

}int dfs(int u,int maxflow)

return add;

}int dinic()

return ans;

}int main()

for(int j=1;j<=y;j++)

}int ans=dinic();

printf("%d\n",ans);

}

POJ 3281(最大流,拆點)

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

POJ 3281 Dining 最大流 拆點

解題思路 令st 0為源點,en f 2 n 1為匯點,st向每種食物建流量為1的邊,每種食物向喜歡它的牛 拆點1 建流量為1的邊,眉頭牛的拆點之間建流量為1的邊,每頭牛 拆點2 向它喜歡的飲料建流量為1的邊,每種飲料向en建流量為一的邊。注意,一定要將牛拆點,如果一頭牛只用乙個點然後連線飲料和食物...

poj 3281 Dining(最大流基礎,拆點)

題意 思路 因為food和drink要麼同時要,要不都不要,則需要把它們串起來,牛放中間 對牛進行拆點以限制每頭牛吃了乙份food,和乙份drink const int inf int max 2 const int maxn 100000 const int maxv 500 struct edg...