POJ-3281 Dining
题目链接: POJ-3281 Dining 题意 有$N$头牛,$F$个食物,$D$个饮料,每头牛有一定的喜好,只喜欢某几个食物和饮料,一头牛必须同时获得一个食物和一个饮料才能满足,问至多有多少头牛可以获得满足。 思路 流网络建图: 一头牛拆分成两个点$u$和$v$,这头牛喜欢的食物向$u$连边,$u$向$v$连边,$v$向这头牛喜欢的饮料连边; 源点$s$向每个食物连边,每个饮料向汇点$t$连边,所有边容量都是1。 最大流即为答案。 代码实现 #include <iostream> #include <cstdio> #include <cstring> #include <queue> using std::queue; const int INF = 1 << 29, N = 1000, M = 30010; int head[N], ver[M], edge[M], Next[M], d[N]; int s, t, tot, maxflow; queue<int> q; void add(int x, int y, int z) { ver[++tot] = y, edge[tot] = z, Next[tot] = head[x], head[x] = tot; ver[++tot] = x, edge[tot] = 0, Next[tot] = head[y],