題意就是每個人都有喜歡的飲料和食物,但是這些飲料和食物有限,問你如何選才能使最多的人喝到自己喜歡的飲料和食物。
這題主要就是想清楚如何建邊,然後跑乙個最大流就好了
分別建立 源點指向飲料的邊 飲料指向人的邊 人指向自己的邊(保證每個人只被走一次) 人指向食物的邊,食物指向匯點的邊。
這裡要把人的點拆成兩個,為了保證每個人只走一次。然後跑一遍最大流就好了。
#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!如果還...