poj 3281 Dining (Dinic)
| Time Limit: 2000MS | Memory Limit: 65536K | |
| Total Submissions: 22572 | Accepted: 10015 |
Description
Cows are such finicky eaters. Each cow has a preference for certain foods and drinks, and she will consume no others.
Farmer John has cooked fabulous meals for his cows, but he forgot to check his menu against their preferences. Although he might not be able to stuff everybody, he wants to give a complete meal of both food and drink to as many cows as possible.
Farmer John has cooked F (1 ≤ F ≤ 100) types of foods and prepared D (1 ≤ D ≤ 100) types of drinks. Each of his N (1 ≤ N ≤ 100) cows has decided whether she is willing to eat a particular food or drink a particular drink. Farmer John must assign a food type and a drink type to each cow to maximize the number of cows who get both.
Each dish or drink can only be consumed by one cow (i.e., once food type 2 is assigned to a cow, no other cow can be assigned food type 2).
Input
Lines 2..N+1: Each line i starts with a two integers Fi and Di, the number of dishes that cow i likes and the number of drinks that cow i likes. The next Fi integers denote the dishes that cow i will eat, and the Di integers following that denote the drinks that cow i will drink.
Output
Sample Input
4 3 3
2 2 1 2 3 1
2 2 2 3 1 2
2 2 1 3 1 2
2 1 1 3 3
Sample Output
3
C/C++:
#include <map>
#include <queue>
#include <cmath>
#include <vector>
#include <string>
#include <cstdio>
#include <cstring>
#include <climits>
#include <iostream>
#include <algorithm>
#define INF 0x3f3f3f3f
using namespace std;
const int my_max = ; int my_map[my_max][my_max], my_cow, my_food, my_drink, my_source,
my_sink, n, my_dis[my_max]; int my_dfs(int step, int ans)
{
if (step == my_sink) return ans; int temp = ans;
for (int i = ; i < n && temp; ++ i)
{
if (my_dis[i] + == my_dis[step] && my_map[step][i])
{
int t = my_dfs(i, min(ans, my_map[step][i]));
ans -= t;
my_map[step][i] -= t;
my_map[i][step] += t;
}
}
return temp - ans;
} bool my_bfs()
{
memset(my_dis, -, sizeof(my_dis));
my_dis[my_sink] = ;
queue <int> Q;
Q.push(my_sink);
while (!Q.empty())
{
int my_temp = Q.front();
for (int i = ; i < n; ++ i)
{
if (my_dis[i] == - && my_map[i][my_temp])
{
my_dis[i] = my_dis[my_temp] + ;
Q.push(i);
}
}
if (my_temp == my_source) return true;
Q.pop();
}
return false;
} int my_dinic()
{
int my_max_flow = ;
while (my_bfs())
my_max_flow += my_dfs(my_source, INF); return my_max_flow;
} int main()
{
while (~scanf("%d%d%d", &my_cow, &my_food, &my_drink))
{
my_source = , my_sink = my_food + *my_cow + my_drink;
for (int i = ; i <= my_food; ++ i) my_map[my_source][i] = ;
for (int i = ; i <= my_cow; ++ i) my_map[my_food + i][my_food + my_cow + i] = ;
for (int i = ; i <= my_drink; ++ i) my_map[my_food + *my_cow + i][my_sink] = ; for (int i = ; i <= my_cow; ++ i)
{
int my_food_num, my_drink_num;
scanf("%d%d", &my_food_num, &my_drink_num);
while (my_food_num --)
{
int my_temp;
scanf("%d", &my_temp);
my_map[my_temp][my_food + i] = ;
}
while (my_drink_num --)
{
int my_temp;
scanf("%d", &my_temp);
my_map[my_food + my_cow + i][my_food + * my_cow + my_temp] = ;
}
} n = my_sink + ;
printf("%d\n", my_dinic());
}
return ;
}
poj 3281 Dining (Dinic)的更多相关文章
- POJ 3281 Dining (网络流)
POJ 3281 Dining (网络流) Description Cows are such finicky eaters. Each cow has a preference for certai ...
- POJ 3281 Dining(最大流)
POJ 3281 Dining id=3281" target="_blank" style="">题目链接 题意:n个牛.每一个牛有一些喜欢的 ...
- POJ 3281 网络流dinic算法
B - Dining Time Limit:2000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u Submit S ...
- poj 3281 Dining 网络流-最大流-建图的题
题意很简单:JOHN是一个农场主养了一些奶牛,神奇的是这些个奶牛有不同的品味,只喜欢吃某些食物,喝某些饮料,傻傻的John做了很多食物和饮料,但她不知道可以最多喂饱多少牛,(喂饱当然是有吃有喝才会饱) ...
- POJ 3281 Dining(最大流+拆点)
题目链接:http://poj.org/problem?id=3281 题目大意:农夫为他的 N (1 ≤ N ≤ 100) 牛准备了 F (1 ≤ F ≤ 100)种食物和 D (1 ≤ D ≤ 1 ...
- POJ 3281 Dining(最大流)
http://poj.org/problem?id=3281 题意: 有n头牛,F种食物和D种饮料,每头牛都有自己喜欢的食物和饮料,每种食物和饮料只能给一头牛,每头牛需要1食物和1饮料.问最多能满足几 ...
- POJ 3281 Dining(网络流拆点)
[题目链接] http://poj.org/problem?id=3281 [题目大意] 给出一些食物,一些饮料,每头牛只喜欢一些种类的食物和饮料, 但是每头牛最多只能得到一种饮料和食物,问可以最多满 ...
- poj 3281 Dining (最大网络流)
题目链接: http://poj.org/problem?id=3281 题目大意: 有n头牛,f种食物,d种饮料,第i头牛喜欢fi种食物和di种饮料,每种食物或者饮料被一头牛选中后,就不能被其他的牛 ...
- POJ 3281 Dining
Dining Description Cows are such finicky eaters. Each cow has a preference for certain foods and dri ...
随机推荐
- HTML CSS3中2D转换、3D转换、过渡效果总结
一.CSS3 2D转换 通过 CSS3 转换,我们可以对元素进行移动.缩放.转动.拉长或拉伸. 特别注意,我们在使用css3动画效果时,必须给他们加相应的浏览器前缀,以便浏览器识别,让我们更好的去应用 ...
- [Luogu3554] Poi2013 Triumphal arch
Description Foreseeable和拿破仑的御用建筑师让·夏格伦在玩游戏 让·夏格伦会玩一个叫“凯旋门”的游戏:现在有一棵n个节点的树,表示一个国家 1号点代表这个国家的首都 这个游戏由两 ...
- netty中Pipeline的ChannelHandler执行顺序案例详解
一.netty的Pipeline模型 netty的Pipeline模型用的是责任链设计模式,当boss线程监控到绑定端口上有accept事件,此时会为该socket连接实例化Pipeline,并将In ...
- dos命令创建批处理脚本
win+r 打开cmd 输入 copy con 1.bat 回车 进入编辑状态输入 @echo off echo xxxx Ctrl+z 结束编辑 会在当前目录生成一个bat文件
- 徐明星系列之徐明星创办的OK资本成为RnF金融有限公司的锚定投资者
12月17日,由区块链专家徐明星创办的OK集团的投资部门OK资本宣布,它将成为RnF金融有限公司的锚定投资者.OK集团成立于2012年,创始人徐明星是前豆丁网CTO,从豆丁网离职后,徐明星创办了OK集 ...
- SVN命令行笔记
SVN命令行笔记 近期玩了一下命令行,记录如下. svn info <path> #查看文件,路径信息 svn log <path> #查看文件,路径历史记录 svn st(s ...
- OptimalSolution(9)--其他问题(2)
一.有关阶乘的两个问题 二.最大的leftMax与rightMax之差的绝对值 三.路径数组变为统计数组 四.一种字符串和数字的对应关系 五.1到n中1出现的次数 六.数字的英文表达和中文表达 七.分 ...
- Java基础(二十一)集合(3)List集合
一.List接口 List集合为列表类型,列表的主要特征是以线性方式存储对象. 1.实例化List集合 List接口的常用实现类有ArrayList和LinkedList,根据实际需要可以使用两种方式 ...
- Awake,start,update,OnEnable,OnDisable
如题,unity继承自MonoBehaviour的以上方法的先后顺序为Awake-OnEnable-start-update-OnDisable.不同游戏物体之间以及子游戏物体之间方法是怎么调用的呢. ...
- java script三大组成部分
JavaScript是一种属于网络的脚本语言,已经被广泛用于Web应用开发,常用来为网页添加各式各样的动态功能,为用户提供更流畅美观的浏览效果.通常JavaScript脚本是通过嵌入在HTML中来实现 ...