题意很简单:JOHN是一个农场主养了一些奶牛,神奇的是这些个奶牛有不同的品味,只喜欢吃某些食物,喝某些饮料,傻傻的John做了很多食物和饮料,但她不知道可以最多喂饱多少牛,(喂饱当然是有吃有喝才会饱)

输入数据有N,F,D,表示牛的个数,食物的数量,饮料的数量

接着输出N行表示N个牛的数据

每个牛的数据前2个是Fi和Di表示第i个牛喜欢吃的食物种数和饮料种数,接着输出Fi个食物的编号和Di个食物的编号

ok题意就是这样,这题主要考的是建图

需要把牛拆点,一分为二 图应该是 这种形式      源点 ->饮料->牛->牛->食物->汇点  当然食物和饮料的位置可以互换   牛->牛的边,只能是自己和自己有一条边而且边权为一 而且源点和一个饮料之间有且仅有一条边,边权为一,这样就保证了每个饮料只能被一头牛喝,同理 每个食物与汇点之间有且仅有一条边而且边权为一

既然图建好了那么就套模板吧

我的代码,注释还算详细吧

/*********
PRO: POJ 3281
TIT: Dining
DAT: 2013-08-14
AUT: UKean
EMA: huyocan@163.com
*********/
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<queue>
#define INF 1e9
using namespace std;
queue<int> que;//广搜需要使用的队列
int M;//M是点数
int s,t;//源点和汇点
int flow[505][505];//残流量
int p[505];//广搜记录路径的父节点数组
int a[505];//路径上的最小残量
int cap[505][505];//容量网络
int ans;//最大流
int read()
{
int N,F,D,temp;
if(!(cin>>N>>F>>D)) return 0;
memset(cap,0,sizeof(cap));
s=0;//超级源点
t=M=F+N+N+D+1;//超级汇点
for(int i=1;i<=N;i++)//1到D是饮料 D+1到N+D是牛,N+D+1到N+D+N是牛 2*N+D+1到2*N+F+D是食物
{
cap[i+D][N+i+D]=1;//牛与牛之间建立一条边
int fnum,dnum;
cin>>fnum>>dnum;//第i头牛喜欢的食物数和饮料数
for(int j=0;j<fnum;j++)//
{
cin>>food;
cap[D+i+N][D+2*N+food]+=1;//牛与食物之间建立一条边
cap[D+2*N+food][t]=1;//食物与会点之间建立一条边,但是边权只能为一,因为一个食物只能被选一次
}
for(int j=0;j<dnum;j++)
{
int drink;cin>>drink;
cap[s][drink]=1;//饮料与会点之间建立一条边,但是边权只能为一,因为一个饮料只能被选一次
cap[drink][D+i]+=1;//饮料与牛之间建立一条边
}
}
return 1;
} int deal()//增广路算法就不具体解释了,详细的解释可以看我关于网络流的第一篇博客
// http://blog.csdn.net/hikean/article/details/9918093
{
memset(flow,0,sizeof(flow));
ans=0;
while(1)
{
memset(a,0,sizeof(a));
a[s]=INF;
que.push(s);
while(!que.empty())
{
int u=que.front();que.pop();
for(int v=0;v<=M;v++)
if(!a[v]&&cap[u][v]-flow[u][v]>0)
{
p[v]=u;
que.push(v);
a[v]=min(a[u],cap[u][v]-flow[u][v]);
}
}
if(a[t]==0) break;
for(int u=t;u!=s;u=p[u])
{
flow[p[u]][u]+=a[t];
flow[u][p[u]]-=a[t];
}
ans+=a[t];
}
cout<<ans<<endl;
return ans;
}
int main()
{
//freopen("in.txt","r",stdin);
//freopen("out.txt","w",stdout);
while(read())
deal();
return 0;
}

另外附2组数据

4 6 9 13 32 40 3 5 29 32 41 45
3 2 18 20 31 28 52
3 5 10 17 35 12 19 40 53 55
3 8 2 8 31 3 8 9 18 21 42 47 55
5 7 8 11 14 29 40 4 7 13 17 28 45 49
5 2 11 18 28 32 35 27 29
3 8 7 38 40 4 11 17 26 28 30 38 55
3 2 5 9 25 12 33
4 5 2 13 23 24 3 12 34 52 59
4 3 1 21 30 35 6 23 40
2 9 30 31 18 23 27 31 34 38 51 57 58
6 6 8 13 18 28 30 32 1 30 41 50 57 59
4 5 5 19 28 32 38 42 43 44 59
3 3 4 21 32 13 16 33
4 6 12 15 20 28 5 6 21 38 43 57
2 2 6 17 36 48
3 3 29 32 35 2 6 54
1 4 18 11 19 48 55
2 3 2 35 8 10 57
2 10 4 29 3 4 5 13 17 20 31 40 41 59
3 3 7 12 17 35 45 57
3 2 20 21 24 2 6
5 5 5 16 18 29 35 25 30 36 39 41
4 5 5 27 33 35 33 35 45 49 55
0 6 7 18 29 34 46 60
3 11 27 31 39 11 14 23 25 29 32 36 40 44 48 56
1 5 21 5 17 25 47 49

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

答案是 29  3

poj 3281 Dining 网络流-最大流-建图的题的更多相关文章

  1. poj 1149 Pigs 网络流-最大流 建图的题目(明天更新)-已更新

    题目大意:是有M个猪圈,N个顾客,顾客要买猪,神奇的是顾客有一些猪圈的钥匙而主人MIRKO却没有钥匙,多么神奇?顾客可以在打开的猪圈购买任意数量的猪,只要猪圈里有足够数量的猪.而且当顾客打开猪圈后mi ...

  2. POJ 3281 Dining 网络流最大流

    B - DiningTime Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hust.edu.cn/vjudge/contest/view.ac ...

  3. POJ 2195 一人一房 最小费用流 建图 水题

    Going Home Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 21010   Accepted: 10614 Desc ...

  4. POJ 3281 Dining (网络流之最大流)

    题意:农夫为他的 N (1 ≤ N ≤ 100) 牛准备了 F (1 ≤ F ≤ 100)种食物和 D (1 ≤ D ≤ 100) 种饮料.每头牛都有各自喜欢的食物和饮料, 而每种食物或饮料只能分配给 ...

  5. POJ 3281 Dining (网络流构图)

    [题意]有F种食物和D种饮料,每种食物或饮料只能供一头牛享用,且每头牛只享用一种食物和一种饮料.现在有N头牛,每头牛都有自己喜欢的食物种类列表和饮料种类列表,问最多能使几头牛同时享用到自己喜欢的食物和 ...

  6. POJ 3281 Dining[网络流]

    Cows are such finicky eaters. Each cow has a preference for certain foods and drinks, and she will c ...

  7. POJ 3281 Dining(最大流)

    http://poj.org/problem?id=3281 题意: 有n头牛,F种食物和D种饮料,每头牛都有自己喜欢的食物和饮料,每种食物和饮料只能给一头牛,每头牛需要1食物和1饮料.问最多能满足几 ...

  8. poj 3281 Dining【最大流】

    记得把牛拆掉!拆成两个点i和i'在中间连一条流量为1的边,来限制每头牛只能选一组 一般来讲是一种物品一个消费者各占一边,但是这里有两个物品,所以考虑把牛放在中间,s向所有的食物连流量为1的边,所有食物 ...

  9. POJ 3281 Dining(网络流-拆点)

    Cows are such finicky eaters. Each cow has a preference for certain foods and drinks, and she will c ...

随机推荐

  1. vs2010更改默认环境设置

    今天刚刚装vs2010手欠点击了新建团队项目,在百度上各种查找说让我去 visual studio tools的命令提示中进行 devenv命令行修改 ResetString但是没找到我设置文件的路径 ...

  2. C++内联函数与宏定义

    用内联取代宏: 1.内联可调试: 2.可进行类型安全检查或自动类型转换: 3.可访问成员变量. 另外,定义在类声明中的成员函数自动转化为内联函数. 文章(一) 内联函数与宏定义 在C中,常用预处理语句 ...

  3. Struts学习之集成Ajax

    转自:http://blog.csdn.net/hanxuemin12345/article/details/38782213 一,引题 1,Json数据格式简介 JSON是脱离语言的理想的数据交换格 ...

  4. 网络编程——TCP连接

    TCP在双方传输数据前,发送方先请求建立连接,接收方同意建立连接后才能传输数据.(打电话:先拨号,等对方同意接听后,才能交流)...高可靠性 UDP不需要建立连接(发短信).不可靠,可能出现数据丢失等 ...

  5. Database SQL script automation management tools investigation

    Recently researched about database SQL scripts auto management tools, recorded the results here. Res ...

  6. [转] tomcat组成及工作原理

    1 - Tomcat Server的组成部分 1.1 - Server A Server element represents the entire Catalina servlet containe ...

  7. java.lang.UnsupportedClassVersionError: Bad version number in .class file 解决方案

    在Myeclipse中运行小应用程序时出现如下异常的解决办法 java.lang.UnsupportedClassVersionError: Bad version number in .class ...

  8. 17.1.1.9 Introducing Additional Slaves to an Existing Replication Environment 引入额外的Slaves 到一个存在的复制

    17.1.1.9 Introducing Additional Slaves to an Existing Replication Environment 引入额外的Slaves 到一个存在的复制环境 ...

  9. 用Visual C++设计“精灵”窗体

    随着Microsoft凭借Windows在操作系统上取得的巨大成绩,Windows用户界面也日益成为业界标准.统一的界面给广大用户对应用软件的学习与使用带来了很大方便.但每天都面对同一副面孔,日久天长 ...

  10. hdoj 1824 Let's go home(2-SAT)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1824 思路分析:该问题为2-SAT问题:需要注意逻辑推理的等价性: (1)题目第一个条件:每一个队或者 ...