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 ...
随机推荐
- iOS Developer:真机测试
如果出现ios development一项为灰色不可点击状态,苹果的说法是 如果您要为此电脑添加证书,请revoke以前的证书后添加,或者通过以前的mac导出证书 原文不记得了,大概这个意思,苹果不希 ...
- python 元类
转载自 http://blog.jobbole.com/21351/ 类也是对象 在理解元类之前,你需要先掌握Python中的类.Python中类的概念借鉴于Smalltalk,这显得有些奇特.在大 ...
- Kinect v2.0 for windows开发环境说明
官方文档里是这些: Supported Operating Systems and Architectures The following operating systems and architec ...
- Linux之DNS
DNS服务器配置 一.DNS概述:DNS 是域名系统 (Domain Name System) 的缩写,是一种组织域层次结构的计算机和网络服务命名系统.它的作用是:把域名转换成为网络可以识别的 IP ...
- Windows phone8.1教务在线客户端
本人是个大二学生,由于学校的教务在线一直没出windows phone的教务在线,而且本身也对wp开发感兴趣,所以就尝试着开发一下 由于没有系统的学习,只能在摸索中前进,这背后的原理很简单,可不容易实 ...
- 解决ViewPage中嵌套有ListView或者滑动手势等造成滑动的冲突
public class ViewPagerCompat extends ViewPager { //mViewTouchMode表示ViewPager是否全权控制滑动事件,默认为false,即不控制 ...
- ENode 2.0 - 整体架构介绍
前言 今天是个开心的日子,又是周末,可以轻轻松松的写写文章了.去年,我写了ENode 1.0版本,那时我也写了一个分析系列.经过了大半年的时间,我对第一个版本做了很多架构上的改进,最重要的就是让ENo ...
- 【转载】学习资料存档:jQuery的deferred对象详解
我在以前的文章里提到promise和deferred,这两个东西其实是对回调函数的一种写法,javascript的难点之一是回调函数,但是我们要写出优秀的javascript代码又不得不灵活运用回调函 ...
- SpriteSheet精灵动画引擎
SpriteSheet精灵动画引擎 本文介绍Flash中SpriteSheet精灵序列图与其它渲染方式的性能对比.SpriteSheet的原理及注意实现,最后实现了一个精灵序列图的渲染引擎.本文的 ...
- python 模块加载
python 模块加载 本文主要介绍python模块加载的过程. module的组成 所有的module都是由对象和对象之间的关系组成. type和object python中所有的东西都是对象,分为 ...
