hdu4292Food(最大流Dinic算法)
/*
题意:每一个人都有喜欢的吃的和喝的,每一个人只选择一个数量的吃的和一个数量的喝的,问能满足最多的人数!?
思路:建图很是重要!f-food, p-people, d-drink
建图: 0(源点)--->f--->p---->p'---->d--->t(汇点)
将人拆分很是重要,因为每一个人最多只能有一种选择,也就是p--->p'的最大流量是 1!
如果还是不清楚,看一看下图的例子,将人拆分与不拆分的区别!
*/
1 #include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<vector>
#include<queue>
#define N 850
#define M 201000
#define INF 0x3f3f3f3f
using namespace std; struct EDGE{
int v, cap, nt;
}; int first[N];
EDGE g[M];
int cnt;
int n, f, d; void addEdge(int u, int v, int cap){
g[cnt].v=v;
g[cnt].cap=cap;
g[cnt].nt=first[u];
first[u]=cnt++; g[cnt].v=u;
g[cnt].cap=;
g[cnt].nt=first[v];
first[v]=cnt++;
} int ans, ss; queue<int>q;
int dist[N]; bool bfs(){
memset(dist, , sizeof(dist));
dist[]=;
q.push();
while(!q.empty()){
int u=q.front();
q.pop();
for(int e=first[u]; ~e; e=g[e].nt){
int v=g[e].v;
int cap=g[e].cap;
if(!dist[v] && cap>){
dist[v]=dist[u]+;
q.push(v);
}
}
}
if(dist[ss+]==) return false;
return true;
} int dfs(int u, int flow){
int ff;
if(u==ss+) return flow;
for(int e=first[u]; ~e; e=g[e].nt){
int v=g[e].v;
int cap=g[e].cap;
if(dist[v]==dist[u]+ && cap> && (ff=dfs(v, min(cap, flow)))){
g[e].cap-=ff;
g[e^].cap+=ff;
return ff;
}
}
dist[u]=-;//表示u节点不能到达汇点!
return ;
} void Dinic(){
ans=;
int d;
while(bfs())
while(d=dfs(, INF))
ans+=d;
} int main(){
while(scanf("%d%d%d", &n, &f, &d)!=EOF){
ss=*n+f+d;
cnt=;
memset(first, -, sizeof(first));
for(int i=; i<=f; ++i){//源点到吃的建一条有向边,最大流量为吃的的数量
int x;
scanf("%d", &x);
addEdge(, i, x);
} for(int i=; i<=d; ++i){//喝的到汇点建一条有向边,最大流量为喝的的数量
int x;
scanf("%d", &x);
addEdge(n*+f+i, ss+, x);
}
for(int i=; i<=n; ++i){//吃的到人建一条有向边,最大流量为1
getchar();
for(int j=; j<=f; ++j){
char ch;
scanf("%c", &ch);
if(ch=='Y')
addEdge(j, f+i, );
}
} for(int i=; i<=n; ++i){//人到喝的建一条有向边,最大流量为1
addEdge(f+i, n+f+i, );//人属于节点容量,将人进行拆分,因为每一个人只能有一种选择!
getchar();
for(int j=; j<=d; ++j){
char ch;
scanf("%c", &ch);
if(ch=='Y')
addEdge(n+f+i, f+n*+j, );
}
} Dinic();
printf("%d\n", ans);
}
return ;
}
hdu4292Food(最大流Dinic算法)的更多相关文章
- 网络流之最大流Dinic算法模版
/* 网络流之最大流Dinic算法模版 */ #include <cstring> #include <cstdio> #include <queue> using ...
- 学习笔记 --- 最大流Dinic算法
为与机房各位神犇同步,学习下网络流,百度一下发现竟然那么多做法,最后在两种算法中抉择,分别是Dinic和ISAP算法,问过 CA爷后得知其实效率上无异,所以决定跟随Charge的步伐学习Dinic,所 ...
- Power Network(网络流最大流 & dinic算法 + 优化)
Power Network Time Limit: 2000MS Memory Limit: 32768K Total Submissions: 24019 Accepted: 12540 D ...
- 最大流——Dinic算法
前面花了很长时间弄明白了压入-重标记的各种方法,结果号称是O(V3)的算法测demo的时候居然TLE了一个点,看了题解发现所有人都是用Dinic算法写的,但它的复杂度O(V2E)明显高于前者,具体是怎 ...
- 求最大流dinic算法模板
//最短增广路,Dinic算法 struct Edge { int from,to,cap,flow; };//弧度 void AddEdge(int from,int to,int cap) //增 ...
- POJ 3469.Dual Core CPU 最大流dinic算法模板
Dual Core CPU Time Limit: 15000MS Memory Limit: 131072K Total Submissions: 24830 Accepted: 10756 ...
- 最大流Dinic算法
嘿嘿嘿,时隔不久又见到了DInic,再次回顾一下吧 不过这次我倒是不想深究,而是想多做一些题,因为这几次比赛下来,算法不是重点,重点是题目如何转化,算法如何应用,这也是比赛为什么让你带着板子的原因吧, ...
- hdu-3572 Task Schedule---最大流判断满流+dinic算法
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=3572 题目大意: 给N个任务,M台机器.每个任务有最早才能开始做的时间S,deadline E,和持 ...
- P3376 【模板】网络最大流dinic算法
P3376 [模板]网络最大流 题目描述 如题,给出一个网络图,以及其源点和汇点,求出其网络最大流. 输入输出格式 输入格式: 第一行包含四个正整数N.M.S.T,分别表示点的个数.有向边的个数.源点 ...
- 网络流(最大流-Dinic算法)
摘自https://www.cnblogs.com/SYCstudio/p/7260613.html 网络流定义 在图论中,网络流(Network flow)是指在一个每条边都有容量(Capacity ...
随机推荐
- Lua 栈的理解
提到C++与lua互调,不可不提栈. 栈是C++和Lua相互通讯的一个地方. 首先这个栈并不是传统意义上的栈(传统的栈需要放同一种数据类型,但在网上的某些资料说,每个栈元素是一个联合体). 栈从上向下 ...
- CUTE-WRV2.1+TCP core(COM5402)的TCP带宽测试
问题的提出 测试TCP的带宽,硬件平台CUTE-WRV2.1,固件版本WRPCV3.0+COM5402. 代码.工具及实现 1. 在固件中,增加模块,收到TCP数据包后不断地往外发数: library ...
- Python 之 super & MRO (没有遇到过适用场景)
WOW!!! 这里wow的是真尼玛绕且没看完, 好困呐,贴上网址,等自己英文好一点再看(https://rhettinger.wordpress.com/2011/05/26/super-consid ...
- UILabel实现自适应高宽
UILabel是iOS开发常用的控件.UILabel的属性需要了解,UILabel的特殊显示效果也需要我们掌握.UILabel自适应高宽度是很多初学者遇到的技术性难题.比如段文字,要让他完全地分行显示 ...
- 手机浏览器,微信中播放amr录音
由于微信公众号开发中,临时素材只有三天的有效期,但是客户要求所有录音永久保存,永久素材数量又有限制,故只能把录音保存到服务器上.但是存到服务器上有一个问题,手机微信中无法直接播放amr录音.无意中发现 ...
- PDO vs. MySQLi 选择哪一个?(PDO vs. MySQLi: Which Should You Use?)-转载
用Php访问数据的时候,你选择MySQLi和PDO,在选择之前,你应该知道些什么呢? 这篇文章将会介绍这两种方式的不同点,数据库的支持.稳定性.性能等问题. 概述 PDO MySQLi Datab ...
- Apple II DOS 源代码发布
加州山景城的计算机历史博物馆不仅仅展示硬件,还展示软件.博物馆此前已发布了著名软件MacPaint .Photoshop和APL的源代码,现在它公开了1978年的Apple II DOS源代码.源代码 ...
- ArcEngine 无法嵌入互操作类型
说明: 在.net 4.0中,声明 IPoint point = new PointClass();会出现下面这个错误 错误 2 类型"ESRI.ArcGIS.Geometry.PointC ...
- flume 1.4的介绍及使用示例
flume 1.4的介绍及使用示例 本文将介绍关于flume 1.4的使用示例,如果还没有安装flume的话可以参考:http://blog.csdn.net/zhu_xun/article/deta ...
- 详解SQL集合运算
以前总是追求新东西,发现基础才是最重要的,今年主要的目标是精通SQL查询和SQL性能优化. 本系列[T-SQL基础]主要是针对T-SQL基础的总结. [T-SQL基础]01.单表查询-几道sql查询题 ...
