给出一些人,一些食物,一些饮料,每个人都只喜欢喝某些饮料,吃某些食品,每个食品和饮料都有一定的数量,现在问最多能满足多少人的需求。

注意理解题意了,每个人只需要要拿一个食物和一个饮料即可,这题目说得好像不是很明显,坑呐。

简单建模。超级源点->食物->人->人'->饮料->超级汇点。除了与源点和汇点的边容量为食物和饮料数量,其他的都为1.

跑最大流,就是答案了。。不多说

召唤代码君:

#include <iostream>
#include <cstdio>
#include <cstring>
#define maxn 1010
#define maxm 2000100
using namespace std; int first[maxn],next[maxm],to[maxm],c[maxm],N;
int d[maxn],tag[maxn],TAG=520;
int s,t,n,F,D,ans,tmp;
char str[maxn][maxn];
int Q[maxn],bot,top;
bool can[maxn]; void _init()
{
s=0,t=F+D+n+n+1,N=-1;
for (int i=s; i<=t; i++) first[i]=-1;
} void addedge(int U,int V,int W)
{
N++;
to[N]=V,c[N]=W,next[N]=first[U],first[U]=N;
N++;
to[N]=U,c[N]=0,next[N]=first[V],first[V]=N;
} void edge_build()
{
for (int i=1; i<=F; i++) scanf("%d",&tmp),addedge(s,i,tmp);
for (int i=1; i<=D; i++) scanf("%d",&tmp),addedge(F+n+n+i,t,tmp);
for (int i=1; i<=n; i++) scanf("%s",str[i]+1);
for (int i=1; i<=n; i++)
for (int j=1; j<=F; j++)
if (str[i][j]=='Y') addedge(j,F+i,1);
for (int i=1; i<=n; i++) scanf("%s",str[i]+1);
for (int i=1; i<=n; i++)
for (int j=1; j<=D; j++)
if (str[i][j]=='Y') addedge(F+n+i,F+n+n+j,1);
for (int i=1; i<=n; i++) addedge(F+i,F+n+i,1);
} bool bfs()
{
TAG++;
Q[bot=top=1]=t,d[t]=0,tag[t]=TAG,can[t]=false;
while (bot<=top)
{
int cur=Q[bot++];
for (int i=first[cur]; i!=-1; i=next[i])
if (c[i^1]>0 && tag[to[i]]!=TAG)
{
tag[to[i]]=TAG,Q[++top]=to[i],d[to[i]]=d[cur]+1,can[to[i]]=false;
if (to[i]==s) return true;
}
}
return false;
} int dfs(int cur,int num)
{
if (cur==t) return num;
int tmp=num,k;
for (int i=first[cur]; i!=-1; i=next[i])
if (c[i]>0 && tag[to[i]]==TAG && d[to[i]]==d[cur]-1 && can[to[i]]==false)
{
k=dfs(to[i],min(num,c[i]));
if (k) num-=k,c[i]-=k,c[i^1]+=k;
if (num==0) break;
}
if (num) can[cur]=true;
return tmp-num;
} int main()
{
while (scanf("%d%d%d",&n,&F,&D)!=EOF)
{
_init();
edge_build();
for (ans=0; bfs(); bfs()) ans+=dfs(s,maxm);
printf("%d\n",ans);
}
return 0;
}

  

HDU4292_Food的更多相关文章

随机推荐

  1. Web层框架对网站中所有异常的统一处理

    一个网站的异常信息作为专业的人士,是不会轻易暴露给用户的,因为那样狠不安全,显得你漏是一回事,只要还是考虑到网站的数据安全问题,下面给大家分享一下一些常见的web层框架是如何处理统一的异常. 之前都是 ...

  2. TCP协议的特点

    tcp 面向连接,三次握手,创建会话:双向的关闭tcp 可靠性,具备传输确认机制,接收端会对接收到的数据进行ack确认;tcp 具备 rtt (raund动态估算传输时间;tcp 具备超时重传机制tc ...

  3. 使用Nmon_Analyzer excel 问题总结

    使用wps打开nmon的分析文件,出现  运行时错误13类型不匹配 查看具体代码,是这句出现错误Start = DateValue(Sheet1.Range("date")),进一 ...

  4. 关于IPointerEnterHandler和IpointerExitHandler的简单说明

    自己在学习UGUI背包系统时用到了,而且遇到一些问题,所以在这里写一下这两个接口的简单说明. 继承IPointerEnterHandler和IpointerExitHandler这两个接口后可以实现两 ...

  5. 曲线救国:安装golang.org/x/*

    很多第三方库都用到了golang.org/x下面的包,但是国内不通过VPN是无法访问到的,不过没关系,在github.com/golang下面,基本都有对应的包 如何操作? 以安装sys包为例 git ...

  6. python多线程创建与使用(转)

    原文:http://codingpy.com/article/python-201-a-tutorial-on-threads/ 创建多线程 创建多线程主要有2种方式. 使用threading.Thr ...

  7. golang -- 字符串就地取反

    字符串 定义 在golang中字符串是一种不可变的字节序列,它可以包含任意的数据,包括0值字节,但主要是人类可以阅读的文本.golang中默认字符串被解读为utf-8编码的Unicode码点(文字符号 ...

  8. salt-api https连接问题

    在非salt-api的主机上测试api连通性,测试代码如下: #!/usr/bin/env python import pycurl import StringIO import ssl ssl._c ...

  9. 时间戳使用的bug,你见过么

    博主本人前几天给公司项目里写了个禁言和解除禁言的功能,项目中涉及到对时间的处理,因为学得时候也没很注意,就按自己的思路去写了,运行起来发现了一个天大的bug,就是写的延后一年尽然,刚开始就执行了,而且 ...

  10. No.1000_第五次团队会议

    光辉的一夜 今夜注定是不平凡的一夜.是崔强同学伟大的一夜. 昨天因为实验室项目,我刚上完编译课就被学院叫走去做项目,当时我就很无奈,因为说好了要和崔强一起实现下午的前端,他写界面我写底层逻辑,这样我们 ...