題意:有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...