HDU4292_Food
给出一些人,一些食物,一些饮料,每个人都只喜欢喝某些饮料,吃某些食品,每个食品和饮料都有一定的数量,现在问最多能满足多少人的需求。
注意理解题意了,每个人只需要要拿一个食物和一个饮料即可,这题目说得好像不是很明显,坑呐。
简单建模。超级源点->食物->人->人'->饮料->超级汇点。除了与源点和汇点的边容量为食物和饮料数量,其他的都为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的更多相关文章
随机推荐
- 按键精灵手机版多点找色,图片对比 by <剑行洪荒> 忠哥
代码: Do Dim ret1,ret2 Delay 500 ret1 = CmpColor(76,72, "153274", 0.9) ret2 = Cm ...
- 基于Vue+Spring MVC+MyBatis+Shiro+Dubbo开发的分布式后台管理系统
本文项目代码: 服务端:https://github.com/lining90567/dubbo-demo-server 前端:https://github.com/lining90567/dubbo ...
- Jmeter接口测试(七)用例数据分离
之前我们的用例数据都是配置在 Jmeter Http 请求中,每次需要增加,修改用例都需要打开 jmeter 重新编辑,当用例越来越多的时候,用例维护起来就越来越麻烦,有没有好的方法来解决这种情况呢? ...
- Java编辑PPT的柱状图,与内嵌的Excel联动
/** * 条形图:柱形图 的数据写入方法 * @param slide 图表 * @param index 柱状图的下标 * @param data 要填充的数据 * @param titles 内 ...
- VGGnet——从TFrecords制作到网络训练
作为一个小白中的小白,多折腾总是有好处的,看了入门书和往上一些教程,很多TF的教程都是从MNIST数据集入手教小白入TF的大门,都是直接import MNIST,然后直接构建网络,定义loss和opt ...
- play-with-vim1~5
1.移动 h,j,k,l分别对应左下上右 2.模式 vim有四种模式:普通模式,插入模式,可视模式,命令行模式 进入vim 默认为普通模式,光标为方块 输入i 进入插入模式,窗口左下角为insert ...
- 004 --Mysql中的锁的问题
死锁 死锁是指两个或多个事务在同一个资源上相互占用, 并请求锁定对方占用的资源, 从而导致恶性循环的现象. 当多个事务试图以不同顺序锁定资源时, 就可能产生死锁.死锁发生以后, 只有部分或者完全回滚其 ...
- 会了这十种Python优雅的写法,让你工作效率翻十倍,一人顶十人用!
我们都知道,Python 的设计哲学是「优雅」.「明确」.「简单」.这也许很多人选择 Python 的原因.但是我收到有些伙伴反馈,他写的 Python 并不优雅,甚至很臃肿,那可能是你的姿势不对 ...
- Python 3 利用机器学习模型 进行手写体数字检测
0.引言 介绍了如何生成手写体数字的数据,提取特征,借助 sklearn 机器学习模型建模,进行识别手写体数字 1-9 模型的建立和测试. 用到的几种模型: 1. LR,Logistic Regres ...
- 如何快速搭建yum源
yum命令能够从指定的服务器自动下载rpm包并安装,它最强大的地方就是可以自动处理软件包的依赖关系,能够一次安装所有依赖的关系包.下面将通过虚拟机平台介绍两种快速搭建yum源的方法: 一.有网络的情况 ...