HDU 4292Food 最大流 拆點

2021-07-15 11:31:49 字數 1117 閱讀 5834

題意就是每個人都有喜歡的飲料和食物,但是這些飲料和食物有限,問你如何選才能使最多的人喝到自己喜歡的飲料和食物。

這題主要就是想清楚如何建邊,然後跑乙個最大流就好了

分別建立 源點指向飲料的邊 飲料指向人的邊 人指向自己的邊(保證每個人只被走一次) 人指向食物的邊,食物指向匯點的邊。

這裡要把人的點拆成兩個,為了保證每個人只走一次。然後跑一遍最大流就好了。

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

#define rep(i,s,t) for(int i=s;i<=t;i++)

#define drep(i,s,t) for(int i=s;i>=t;i--)

#define gson(i,root) for(int i=start[root];~i;i=ed[i].next)

const int mm=2e5+10;

const int inf=1<<30;

struct dicnic

edge(int from,int to,int cap,int flow,int next)

}ed[mm];

int n,m,s,t,lnum,head,tail;

int cur[mm],start[mm],que[mm*10],dis[mm];

void init()

void add(int x,int y,int c)

bool bfs()}}

return dis[t]!=-1;

}int dfs(int x,int a)

}return flow;

}int maxflow()

return flow;

}}dic;

int main()

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

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

} for(int i=1;i<=n;i++)

} for(int i=201;i<=400;i++)

printf("%d\n",dic.maxflow());

} return 0;

}

HDU4292 FOOD 最大流 拆點

題目大意 有n個人,num1種食物,num2種飲料。每種食物和每種飲料是有限的。每個人有自己喜歡的食物和飲料的種類。問最多有多少人選到自己喜歡的食物和飲料的搭配方案。每個人只能選乙個食物和一杯飲料!這是一道最大流專題裡的題目。拿到題很容易想到這一種建圖方式。超級源點s向每種食物連邊,流量為該種食物的...

hdu4292Food(最大流Dinic演算法)

題意 每乙個人都有喜歡的吃的和喝的,每乙個人只選擇乙個數量的吃的和乙個數量的喝的,問能滿足最多的人數!思路 建圖很是重要!f food,p people,d drink 建圖 0 源點 f p p d t 匯點 將人拆分很是重要,因為每乙個人最多只能有一種選擇,也就是p p 的最大流量是 1!如果還...

hdu4292Food(最大流Dinic演算法)

題意 每乙個人都有喜歡的吃的和喝的,每乙個人只選擇乙個數量的吃的和乙個數量的喝的,問能滿足最多的人數!思路 建圖很是重要!f food,p people,d drink 建圖 0 源點 f p p d t 匯點 將人拆分很是重要,因為每乙個人最多只能有一種選擇,也就是p p 的最大流量是 1!如果還...