hdu 4292 Food 最大流

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4292

You, a part-time dining service worker in your college’s dining hall, are now confused with a new problem: serve as many people as possible.
  The issue comes up as people in your college are more and more difficult to serve with meal: They eat only some certain kinds of food and drink, and with requirement unsatisfied, go away directly.
  You have prepared F (1 <= F <= 200) kinds of food and D (1 <= D <= 200) kinds of drink. Each kind of food or drink has certain amount, that is, how many people could this food or drink serve. Besides, You know there’re N (1 <= N <= 200) people and you too can tell people’s personal preference for food and drink.
  Back to your goal: to serve as many people as possible. So you must decide a plan where some people are served while requirements of the rest of them are unmet. You should notice that, when one’s requirement is unmet, he/she would just go away, refusing any service.

题意描述:你准备了F种食物(F<=200)和D种饮料(D<=200),每种食物和饮料都有一定的数量。有n个人(n<=200),每个人都有喜欢的食物和饮料并且只能吃自己喜欢的食物、喝喜欢的饮料,求出能够吃到喜欢的食物并喝到喜欢的饮料的最大人数。

算法分析:运用网络最大流求解即可。新增源点from和汇点to,from->食物(w为食物数量),饮料->to(w为饮料数量),对每个人 i 拆边 i 和 i+n ,喜欢的食物->i(w为1),i -> i+n(w为1),i+n->喜欢的饮料(w为1)。

  1 #include<iostream>
  2 #include<cstdio>
  3 #include<cstring>
  4 #include<cstdlib>
  5 #include<cmath>
  6 #include<algorithm>
  7 #include<vector>
  8 #include<queue>
  9 #define inf 0x7fffffff
 10 using namespace std;
 11 const int maxn=200+10;
 12 const int M = 999999;
 13 
 14 int n,F,D;
 15 int from,to,d[maxn*10];
 16 struct node
 17 {
 18     int v,flow;
 19     int next;
 20 }edge[M*2];
 21 int head[maxn*10],edgenum;
 22 
 23 void add(int u,int v,int flow)
 24 {
 25     edge[edgenum].v=v ;edge[edgenum].flow=flow;
 26     edge[edgenum].next=head[u];
 27     head[u]=edgenum++;
 28 
 29     edge[edgenum].v=u ;edge[edgenum].flow=0;
 30     edge[edgenum].next=head[v];
 31     head[v]=edgenum++;
 32 }
 33 
 34 int bfs()
 35 {
 36     memset(d,0,sizeof(d));
 37     d[from]=1;
 38     queue<int> Q;
 39     Q.push(from);
 40     while (!Q.empty())
 41     {
 42         int u=Q.front() ;Q.pop() ;
 43         for (int i=head[u] ;i!=-1 ;i=edge[i].next)
 44         {
 45             int v=edge[i].v;
 46             if (!d[v] && edge[i].flow>0)
 47             {
 48                 d[v]=d[u]+1;
 49                 Q.push(v);
 50                 if (v==to) return 1;
 51             }
 52         }
 53     }
 54     return 0;
 55 }
 56 
 57 int dfs(int u,int flow)
 58 {
 59     if (u==to || flow==0) return flow;
 60     int cap=flow;
 61     for (int i=head[u] ;i!=-1 ;i=edge[i].next)
 62     {
 63         int v=edge[i].v;
 64         if (d[v]==d[u]+1 && edge[i].flow>0)
 65         {
 66             int x=dfs(v,min(cap,edge[i].flow));
 67             cap -= x;
 68             edge[i].flow -= x;
 69             edge[i^1].flow += x;
 70             if (cap==0) return flow;
 71         }
 72     }
 73     return flow-cap;
 74 }
 75 
 76 int dinic()
 77 {
 78     int sum=0;
 79     while (bfs()) sum += dfs(from,inf);
 80     return sum;
 81 }
 82 
 83 int main()
 84 {
 85     while (scanf("%d%d%d",&n,&F,&D)!=EOF)
 86     {
 87         memset(head,-1,sizeof(head));
 88         edgenum=0;
 89         from=F+2*n+D+1;
 90         to=from+1;
 91         int a;
 92         for (int i=1 ;i<=F ;i++)
 93         {
 94             scanf("%d",&a);
 95             add(from,i,a);
 96         }
 97         for (int i=1 ;i<=D ;i++)
 98         {
 99             scanf("%d",&a);
100             add(F+2*n+i,to,a);
101         }
102         char str[maxn];
103         memset(str,0,sizeof(str));
104         for (int i=1 ;i<=n ;i++)
105         {
106             scanf("%s",str+1);
107             for (int j=1 ;j<=F ;j++)
108             {
109                 if (str[j]=='Y')
110                     add(j,F+i,1);
111             }
112         }
113         for (int i=1 ;i<=n ;i++)
114         {
115             scanf("%s",str+1);
116             for (int j=1 ;j<=D ;j++)
117             {
118                 if (str[j]=='Y')
119                     add(F+n+i,F+2*n+j,1);
120             }
121         }
122         for (int i=1 ;i<=n ;i++)
123             add(F+i,F+n+i,1);
124         printf("%d\n",dinic());
125     }
126     return 0;
127 }

 

 

 

转载于:https://www.cnblogs.com/huangxf/p/4324636.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/359181.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

jaxb 生成java类_重用生成的JAXB类

jaxb 生成java类在本文中&#xff0c;我将演示如何利用XJC扩展来重用以前从XML模式生成的类。 当其他XML架构导入XML架构并且您不想每次都生成相同的类时&#xff0c;这很有用。 导入的架构&#xff08;Product.xsd&#xff09; 以下XML模式代表有关产品的基本信息。 产品是此…

怎样在Ubuntu系统安装可用的QQ

http://jingyan.baidu.com/article/9f63fb91d1f6bbc8400f0e1c.html转载于:https://www.cnblogs.com/Ph-one/p/4330749.html

印象笔记桌面版怎么导出html,服务通知:印象笔记PC端Markdown取消支持HTML标签解析功能...

亲爱的用户&#xff1a;印象笔记电脑端 Markdown 取消了对 HTML 标签解析功能的支持&#xff0c;使用 Windows 6.15.12 Beta 版及 Mac 8.3.2 版的部分用户将受到影响&#xff0c;以下是对本次影响的详细说明。“HTML 标签解析”功能自上线以来就得到部分 Markdown 资深用户的深…

普通 项目打包包含第三方jar包

在工程中包含第三方Jar包时&#xff0c;普通打包方式打出的Jar包无法包含第三方Jar包。 可以使用net.sf.fjep.fatjar_0.0.31.jar插件&#xff0c;将第三方Jar包包含在打出的jar包中&#xff0c; 只要将该插件放到Eclipse的dropins目录&#xff08;如&#xff1a;D:\Program F…

如何优化Hibernate EllementCollection语句

介绍 Hibernate支持三种数据映射类型 &#xff1a; 基本 &#xff08;例如String&#xff0c;int&#xff09;&#xff0c; Embeddable和Entity 。 通常&#xff0c;数据库行映射到Entity &#xff0c;每个数据库列都与一个基本属性关联。 当将多个字段映射组合到一个可重用的组…

《黑马程序员》 流程控制(C语言)

------- <a href"http://www.itheima.com" target"blank">android培训</a>、<a href"http://www.itheima.com" target"blank">java培训</a>、期待与您交流&#xff01; --------- 流程控制主要有 顺序结构…

android中屏幕宽高显示不全,Android 获取屏幕宽度跟高度

Android 获取屏幕宽度跟高度在android开发过程中&#xff0c;对于控件的高度&#xff0c;宽度&#xff0c;通过下面的函数调用&#xff0c;轻松实现编程中设置控件的相对宽度跟高度&#xff1a;// 获得屏幕的宽度public static int getScreenWidth(Context ctx) {// 从系统服务…

使用Eclipse将包含第三方jar库的java工程打包成jar包

1、MANIFEST.MF 在工程下新建一个MANIFEST.MF的文件,项目结构如下。 M.java package cn.hwd.main;import java.io.IOException;import org.apache.solr.client.solrj.SolrQuery; import org.apache.solr.client.solrj.SolrServerException; import org.apache.solr.client.s…

C#实现整数冒泡排序、选择排序

/// <summary> /// 交换两个整数的值 /// </summary> /// <param name"aa">数1</param> /// <param name"bb">数2</param> private static void Swap(ref int aa,ref int bb) { …

史上最牛逼的导航网站(很全很详细)

今天,给大家推荐47个聚合型的导航网站 每一个都收录上百个网站,1个能顶100个,丝毫没有夸张的成分。 (推荐收藏) 设计师导航网站 01 优设导航 https://hao.uisdc.com/ 设计师必备的导航网站,包含设计工具、素材资源、字体设计、配色方案、酷站模板等。 界面清晰无广告…

gmat阅读.html,GMAT阅读长难句50句+参考译文.pdf

GMAT 阅读长难句50 句参考译文GMAT 阅读的考查重点是句子结构和句与句、段与段之间的逻辑关系。GMAT 阅读长难句都比较长&#xff0c;读起来拗口。在遇到这类句子时&#xff0c;我们不必细细梳理&#xff0c;而要先抓住句子主干。有些成分根本就对我们做题没有任何影响&#xf…

dbunit使用_使用dbUnit,JSON,HSQLDB和JUnit规则进行数据库单元测试

dbunit使用在本周TDD课程的运行中&#xff0c;我认为编写一些夹具以简化dbUnit的使用将很有趣。 我最初的想法只是教dbUnit有关JSON的知识&#xff0c;但事实证明Lieven Doclo已经做到了。 因此&#xff0c;我决定更进一步&#xff0c;还将dbUnit与JUnit Rules结合起来&#xf…

codeforces 337D Book of Evil(dp)

转载请注明出处&#xff1a; http://www.cnblogs.com/fraud/ ——by fraud Book of Evil Paladin Manao caught the trail of the ancient Book of Evil in a swampy area. This area contains n settlements numbered from 1 to n. Moving through the swamp is ver…

html 如何去滚动条,css怎么去除滚动条?

css可以通过overflow与scroll属性来实现去除滚动条效果。css设置overflow属性为hidden可以实现去除滚动条或设置scroll属性为no。1、这个可以用CSS实现 你可以用JS操作CSS方法一&#xff1a;设置CSS属性overflow为hidden。&#xff1c;body style"overflow:hidden"&a…

从基于Maven的Web应用程序获取版本字符串

打包maven项目时&#xff0c;它将自动在其中生成pom.properties文件&#xff0c;其中将包含版本&#xff0c;artifactId和groupId信息。 这些在运行时很方便拥有并显示给您的Web应用程序。 可以使用如下方法检索它。 public class Application {private String version;public…

【APICloud系列|31】成功上架5个应用商店总结(腾讯应用宝、阿里应用分发平台、华为开发者联盟、小米开放平台、百度开放平台)

应用商店的选择: 腾讯应用宝:http://open.qq.com/阿里应用商店(淘宝手机助手,UC应用商店,豌豆荚):http://open.uc.cn/百度手机助手:http://app.baidu.com/华为应用市场:http://developer.huawei.com/devunion/ui/devplan.html小米应用商店:http://dev.xiaomi.com/con…

PSPO表格

一、项目计划总结&#xff1a; 周活动总结表 日期 任务 听课 编写程序 阅读课本 准备考试 日总计 周日 周一 周二 300 100 30 430 周三 100 50 30 180 周四 200 80 …

html并行加载,html – 浏览器中的最大并行HTTP连接数?

我创建一些挂起的连接到http服务器(彗星&#xff0c;反向ajax等)。它工作确定&#xff0c;但我看到浏览器只允许同时给定域的两个挂起的连接。因此&#xff0c;如果用户在他们的浏览器的Tab1中查看我的网络应用程序&#xff0c;也尝试在Tab2中加载它&#xff0c;他们已经用尽了…

阿里云ECS服务器连接不上3306端口?

连不上3306端口一般有三种情况。 1 .本机上防火墙没有开放3306端口,需要自己配置入站规则,或者关闭本机防火墙。 2 .linux 服务器上的 iptables 防火墙没有开放3306端口, 或者关闭服务器上的防火墙。 打开 /etc/sysconfig/iptables 在 "-A INPUT –m state --sta…

UGUI 锚点

今天我们来学习下UGUI的锚点, 他是做什么的呢&#xff1f; 基本上就是用于界面布局. 1. 1个控件对应1个描点. 2. 描点分成四个小叶片, 每1个叶片 对应 控件四边框的角点 3. 不管屏幕如何放大缩小, 控件四边点与 每一个叶片对应的四边点距离不变.(换句话说,按钮的中心与描点的…