hdu4292Food(最大流Dinic算法)

  /*
   题意:每一个人都有喜欢的吃的和喝的,每一个人只选择一个数量的吃的和一个数量的喝的,问能满足最多的人数!?
    思路:建图很是重要!f-food, p-people, d-drink
    建图: 0(源点)--->f--->p---->p'---->d--->t(汇点)
    将人拆分很是重要,因为每一个人最多只能有一种选择,也就是p--->p'的最大流量是 1!
        如果还是不清楚,看一看下图的例子,将人拆分与不拆分的区别!
         
*/
1
#include<iostream> 2 #include<cstring> 3 #include<cstdio> 4 #include<algorithm> 5 #include<vector> 6 #include<queue> 7 #define N 850 8 #define M 201000 9 #define INF 0x3f3f3f3f 10 using namespace std; 11 12 struct EDGE{ 13 int v, cap, nt; 14 }; 15 16 int first[N]; 17 EDGE g[M]; 18 int cnt; 19 int n, f, d; 20 21 void addEdge(int u, int v, int cap){ 22 g[cnt].v=v; 23 g[cnt].cap=cap; 24 g[cnt].nt=first[u]; 25 first[u]=cnt++; 26 27 g[cnt].v=u; 28 g[cnt].cap=0; 29 g[cnt].nt=first[v]; 30 first[v]=cnt++; 31 } 32 33 int ans, ss; 34 35 queue<int>q; 36 int dist[N]; 37 38 bool bfs(){ 39 memset(dist, 0, sizeof(dist)); 40 dist[0]=1; 41 q.push(0); 42 while(!q.empty()){ 43 int u=q.front(); 44 q.pop(); 45 for(int e=first[u]; ~e; e=g[e].nt){ 46 int v=g[e].v; 47 int cap=g[e].cap; 48 if(!dist[v] && cap>0){ 49 dist[v]=dist[u]+1; 50 q.push(v); 51 } 52 } 53 } 54 if(dist[ss+1]==0) return false; 55 return true; 56 } 57 58 int dfs(int u, int flow){ 59 int ff; 60 if(u==ss+1) return flow; 61 for(int e=first[u]; ~e; e=g[e].nt){ 62 int v=g[e].v; 63 int cap=g[e].cap; 64 if(dist[v]==dist[u]+1 && cap>0 && (ff=dfs(v, min(cap, flow)))){ 65 g[e].cap-=ff; 66 g[e^1].cap+=ff; 67 return ff; 68 } 69 } 70 dist[u]=-1;//表示u节点不能到达汇点! 71 return 0; 72 } 73 74 void Dinic(){ 75 ans=0; 76 int d; 77 while(bfs()) 78 while(d=dfs(0, INF)) 79 ans+=d; 80 } 81 82 int main(){ 83 while(scanf("%d%d%d", &n, &f, &d)!=EOF){ 84 ss=2*n+f+d; 85 cnt=0; 86 memset(first, -1, sizeof(first)); 87 for(int i=1; i<=f; ++i){//源点到吃的建一条有向边,最大流量为吃的的数量 88 int x; 89 scanf("%d", &x); 90 addEdge(0, i, x); 91 } 92 93 for(int i=1; i<=d; ++i){//喝的到汇点建一条有向边,最大流量为喝的的数量 94 int x; 95 scanf("%d", &x); 96 addEdge(n*2+f+i, ss+1, x); 97 } 98 for(int i=1; i<=n; ++i){//吃的到人建一条有向边,最大流量为1 99 getchar(); 100 for(int j=1; j<=f; ++j){ 101 char ch; 102 scanf("%c", &ch); 103 if(ch=='Y') 104 addEdge(j, f+i, 1); 105 } 106 } 107 108 for(int i=1; i<=n; ++i){//人到喝的建一条有向边,最大流量为1 109 addEdge(f+i, n+f+i, 1);//人属于节点容量,将人进行拆分,因为每一个人只能有一种选择! 110 getchar(); 111 for(int j=1; j<=d; ++j){ 112 char ch; 113 scanf("%c", &ch); 114 if(ch=='Y') 115 addEdge(n+f+i, f+n*2+j, 1); 116 } 117 } 118 119 Dinic(); 120 printf("%d\n", ans); 121 } 122 return 0; 123 }

 

转载于:https://www.cnblogs.com/hujunzheng/p/3950737.html

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

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

相关文章

python3.5 连接mysql_python3.5 連接mysql本地數據庫

前期准備工作&#xff1a;安裝python的模塊&#xff0c;網上大部分讓安裝mysqldb模塊&#xff0c;但是會報錯&#xff0c;原因是python3.5不被其支持&#xff1a;請看該鏈接 我們也可以這樣解決&#xff1a;直接執行&#xff1a;sudo pip3 install pymysql;在python3中輸入impo…

java异常顺序_网易新闻

public class SmallT {public static void main(String args[]) {SmallT t new SmallT();int b t.get();System.out.println(b);}public int get() {try {return 1;} finally {return 2;}}}返回的结果是2。我可以通过下面一个例子程序来帮助我解释这个答案&#xff0c;从下面…

java中自动装箱的问题

package wrapper;public class WrapperDemo {public static void main(String[] args) {Integer anew Integer(5);Integer bnew Integer(5);System.out.println(ab);System.out.println(a.equals(b));/*falsetrue*/Integer c127;//属于自动装箱Integer d127;//jdk1.5以后&#…

下载国外网站资料需java_Java开发必知道的国外10大网站

1、https://www.google.com/不解释2、https://stackoverflow.com里面包含各种开发遇到的问题及答案&#xff0c;质量比较高。3、https://github.com/免费的开源代码托管网站&#xff0c;包括了许多开源的项目及示例项目等。4、https://dzone.com/提供技术新闻、编程教程、及各种…

poj 1950 Dessert(dfs枚举,模拟运算过程)

/*   这个代码运行的时间长主要是因为每次枚举之后都要重新计算一下和的值&#xff01;    如果要快的话&#xff0c;应该在dfs&#xff0c;也就是枚举的过程中计算出前边的数值&#xff08;这种方法见第二个代码&#xff09;&#xff0c;直到最后&#xff0c;这样不必每…

poj1949Chores(建图或者dp)

1 /*2 题意&#xff1a;n个任务&#xff0c;有某些任务要在一些任务之前完成才能开始做&#xff01;3 第k个任务的约束只能是1...k-1个任务&#xff01;问最终需要最少的时间完成全部的 4 任务&#xff0…

java 空数组如何判断,java判断数组是否为空

java判断数组是否为空根据数组长度判断&#xff0c;如果为0&#xff0c;则为空&#xff0c;反之不是。 (推荐学习&#xff1a;java课程)public class Main {public static void main(String[] args) {int[] array1 new int[]{}; //被当成 {0}if (array1 null) {System.out.pr…

2014牡丹江网络赛ZOJPretty Poem(暴力枚举)

/*   将给定的一个字符串分解成ABABA 或者 ABABCAB的形式&#xff01; 思路&#xff1a;暴力枚举A, B, C串&#xff01; */ 1 #include<iostream>2 #include<cstring>3 #include<cstdio>4 #include<string>5 6 using namespace std;7 str…

php switch goto,PHP goto语句用法实例

问题当 PHP 在执行代码过程&#xff0c;在某一时刻我们希望它能跳转到某一特定位置继续执行代码&#xff0c;该怎么做呢&#xff1f;回答在 PHP 中&#xff0c;我们可以使用 goto 操作符来使 PHP 代码执行器跳转到程序中某一特定位置。goto 的使用有一定限制&#xff0c;如&…

php curl cookie,php中curl获取返回页面的cookie

php的curl可以模仿用户浏览网页并且获取网页的cookie,获取cookie还有专用的参数如CURLOPT_COOKIEJAR 用于保存 cookie 到文件了,下面一起来看几个例子吧.curl可以获取返回页面设置的cookie,原理跟get_headers是一样的,在返回的头信息中将"Set-Cookie:"的内容取出来即…

php访问网页post获取源码,第一次抓别人网站数据,用postman直接请求可以获取到返回数据,通过代码的方式就一直报错,php...

最近需要抓取下KFC的一些数据通过postman把请求地址和参数都拿过来后可以返回数据我就天真的以为可以通过代码直接发送一个post请求即可但是通过php的curl模拟请求后&#xff0c;返回的一直是服务器异常刚开始时好像成功过&#xff0c;但现在一直都是报这个&#xff0c;我用的就…

c++中关于初始化型参列表的一些问题

1 /*2 1.成员是按照他们在类中出现的顺序进行初始化的&#xff0c;而不是按照他们在初始化列表出现的顺序初始化的!3 一个好的习惯是&#xff0c;按照成员定义的顺序进行初始化。4 2.数组成员在初始化型参列表中不正确 5 */6 #include<iostream>7 #include<cstdio&…

话术php源码,恋爱话术宝典织梦源码

恋爱话术宝典网页版&#xff1a;http://vi.520menghuan.cn恋爱话术宝典app下载&#xff1a;https://www.lanzous.com/i2dmywd恋爱话术宝典app&#xff0c;里面有超过4万条可复制聊天的恋爱聊天话术&#xff0c;这是一款经典的“智能代聊 APP”。花式套路小哥哥、小姐姐&#xf…

c++中基类与派生类中隐含的this指针的分析

先不要看结果&#xff0c;看一下你是否真正了解了this指针&#xff1f; 1 #include<iostream>2 using namespace std;3 4 class Parent{5 public:6 int x;7 Parent *p;8 public:9 Parent(){} 10 Parent(int x){ 11 …

java中子类与父类中隐含的this引用的分析

/*看一下下面的程序&#xff0c;看是否你的答案和运行的答案是否一致&#xff01; */ class Parent{public int x;public Parent p;public Parent(){}public Parent(int x){this.xx; pthis;}public void f(){System.out.println("Parent::f()"); }public void g(){Sy…

php注册机制,php自动注册登录验证机制实现代码_PHP教程

背景&#xff1a;在phpwind站点后台添加一个名为“广告管家”(广告管家为CNZZ的一款广告投放的应用)的应用&#xff0c;整个“广告管家”的应用是通过iframe载入&#xff0c;载入的具体内容根据不同站点显示针对该站点的具体内容&#xff0c;为了提高易用性&#xff0c;有以下的…

codeforce No to Palindromes!(枚举)

1 /*2 题意&#xff1a;给定一个字符串中没有任何长度>1的回文子串&#xff01;求按照字典序的该串的下一个字符串3 也不包含长度>1的任何回文子串&#xff01;4 5 思路&#xff1a;从最低位进行枚举&#xff0c;保证第i位 不与 第 i-1位和第 i-2位相…

php js 比较,PHP与JS的比较

1楼一直以来&#xff0c;php和js一样&#xff0c;都被视做脚本语言。的确&#xff0c;他们两者蛮像的。首先他们都是弱类型语言&#xff0c;定义变量的时候不需要指定某个具体类型&#xff0c;变量类型可以实现隐式转换。虽然很多人说这样会带来很多一些潜在的问题&#xff0c;…

codeforces Restore Cube(暴力枚举)

1 /*2 题意&#xff1a;给出立方体的每个顶点的坐标&#xff08;是由源坐标三个数某几个数被交换之后得到的&#xff01;&#xff09;&#xff0c; 3 问是否可以还原出一个立方体的坐标&#xff0c;注意这一句话&#xff1a;4 The numbers in the i-th output line…

php 非递归调用,php 无限分类(非递归)

/*** 无限分类* 2011/8/24* kcj* */include "../conn/conn.php";$flpid$_POST[flpid];$fltitle$_POST[title];$fldes$_POST[des];if(isset($_POST[action])!&&$_POST[action]"add"){ // 无限分类(非递归)&#xff0c;用路径来判断分类归属(flidflp…