H - Food - hdu 4292(简单最大流)
输入描述:

分析:以前是做过类似的题目的,不过输入的信息量比较大,还是使用邻接表的好些,邻接矩阵有可能会TLE,建图如下图流程

#include<stdio.h>
#include<algorithm>
#include<queue>
#include<string.h>
using namespace std; const int MAXN = ;
const int oo = 1e9+; struct Edge{int v, flow, next;}edge[MAXN*MAXN];
int Head[MAXN], cnt;
int layer[MAXN];///分层 void InIt()
{
cnt = ;
memset(Head, -, sizeof(Head));
}
void AddEdge(int u, int v, int flow)
{
edge[cnt].v = v;
edge[cnt].flow = flow;
edge[cnt].next = Head[u];
Head[u] = cnt++;
}
bool bfs(int start, int End)
{
queue<int> Q;Q.push(start);
memset(layer, , sizeof(layer));
layer[start] = ; while(Q.size())
{
int u = Q.front();Q.pop(); if(u == End)return true; for(int j=Head[u]; j!=-; j=edge[j].next)
{
int v = edge[j].v; if(layer[v] == false && edge[j].flow)
{
layer[v] = layer[u] + ;
Q.push(v);
}
}
} return false;
}
int dfs(int u, int MaxFlow, int End)
{
if(u == End)return MaxFlow; int uflow = ; for(int j=Head[u]; j!=-; j=edge[j].next)
{
int v = edge[j].v; if(layer[v]==layer[u]+ && edge[j].flow)
{
int flow = min(MaxFlow-uflow, edge[j].flow);
flow = dfs(v, flow, End); edge[j].flow -= flow;
edge[j^].flow += flow;
uflow += flow; if(uflow == MaxFlow)break;
}
} if(uflow == )
layer[u] = ;
return uflow;
}
int dinic(int start, int End)
{
int MaxFlow = ; while(bfs(start, End) == true)
MaxFlow += dfs(start, oo, End); return MaxFlow;
} int main()
{
int N, F, D; while(scanf("%d%d%d", &N, &F, &D) != EOF)
{///把人拆成两个中间流量是1
int Fi=N*, Di=Fi+F, start=Di+D+, End=start+;
int i, j, x; char s[MAXN]={}; InIt(); for(i=; i<=F; i++)
{///食物与源点相连
scanf("%d", &x);
AddEdge(start, Fi+i, x);
AddEdge(Fi+i, start, );
} for(i=; i<=D; i++)
{///饮料与汇点相连
scanf("%d", &x);
AddEdge(Di+i, End, x);
AddEdge(End, Di+i, );
} for(i=; i<=N; i++)
{///每个人对每种食物的喜欢或者不喜欢
scanf("%s", s+);
for(j=; s[j]; j++)
{
if(s[j] == 'Y')
{///建立食物和人的关系
AddEdge(Fi+j, i, );
AddEdge(i, Fi+j, );
}
} ///人拆成两个点
AddEdge(i, N+i, );
AddEdge(N+i, i, );
}
for(i=; i<=N; i++)
{///个人对饮料的喜爱
scanf("%s", s+);
for(j=; s[j]; j++)
{///建立饮料和人(拆点)的关系
if(s[j] == 'Y')
{
AddEdge(N+i, Di+j, );
AddEdge(Di+j, N+i, );
}
}
} printf("%d\n", dinic(start, End));
} return ;
}
H - Food - hdu 4292(简单最大流)的更多相关文章
- HDU 4292 Food 最大流
Food Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
- H - Food HDU - 4292 网络流
题目 You, a part-time dining service worker in your college’s dining hall, are now confused with a n ...
- HDU 4292 Food (网络流,最大流)
HDU 4292 Food (网络流,最大流) Description You, a part-time dining service worker in your college's dining ...
- FFmpeg的H.264解码器源代码简单分析:环路滤波(Loop Filter)部分
===================================================== H.264源代码分析文章列表: [编码 - x264] x264源代码简单分析:概述 x26 ...
- FFmpeg的H.264解码器源代码简单分析:宏块解码(Decode)部分-帧间宏块(Inter)
===================================================== H.264源代码分析文章列表: [编码 - x264] x264源代码简单分析:概述 x26 ...
- FFmpeg的H.264解码器源代码简单分析:熵解码(Entropy Decoding)部分
===================================================== H.264源代码分析文章列表: [编码 - x264] x264源代码简单分析:概述 x26 ...
- FFmpeg的H.264解码器源代码简单分析:解码器主干部分
===================================================== H.264源代码分析文章列表: [编码 - x264] x264源代码简单分析:概述 x26 ...
- FFmpeg的H.264解码器源代码简单分析:解析器(Parser)部分
===================================================== H.264源代码分析文章列表: [编码 - x264] x264源代码简单分析:概述 x26 ...
- FFmpeg的H.264解码器源代码简单分析:概述
===================================================== H.264源代码分析文章列表: [编码 - x264] x264源代码简单分析:概述 x26 ...
随机推荐
- centos 安装 lnmp
直接yum install nginx不行,要先处理下源,下面是安装完整流程 1. rpm -ivh http://nginx.org/packages/centos/6/noarch/RPMS/ng ...
- ASP.net中网站访问量统计方法
仅共学习 一.建立一个数据表IPStat用于存放用户信息 我在IPStat表中存放的用户信息只包括登录用户的IP(IP_Address),IP来源(IP_Src)和登录时间 (IP_DateTime) ...
- (转)ecshop 后台商品分类添加图片的功能
转之--http://blog.sina.com.cn/s/blog_4696b3760100n5ee.html 1 .首先找到数据表 ecs_category (商品分类表) 添加一 cat_i ...
- cocopods安装
CocoaPods安装和使用教程 Code4App 原创文章.转载请注明出处:http://code4app.com/article/cocoapods-install-usage 目录 CocoaP ...
- Scene is unreachable due to lack of entry points and does not have an identifier for runtime access
使用Storyboard时出现以下警告: warning: Unsupported Configuration: Scene is unreachable due to lack of entry p ...
- WebService CXF调试常见报错及解决方案
1.CXF java.lang.RuntimeException: Cannot create a secure XMLInputFactory 解决方案:从apache-cxf/lib下寻找Wood ...
- 8.模板方法模式-[Head First 设计模式]
模板方法模式在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中.模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤. 要点: “模板方法”定义了算法的步骤,把这些步骤的实现延 ...
- [转]C++基本功和 Design Pattern系列 ctor & dtor
今天Aear讲的是class.ctor 也就是constructor, 和 class.dtor, destructor. 相信大家都知道constructor 和 destructor是做什么用的 ...
- TCP/IP-入门
Life is not a rehearsal "人生没有彩排" 参考资料:TCP/IP入门经典 (第五版) TCP/IP详解 卷一:协议 一.什么是TCP/IP TCP/IP是一 ...
- JavaScript-学习一
JavaScript 对大小写是敏感的. 当编写 JavaScript 语句时,请留意是否关闭大小写切换键. 函数 getElementById 与 getElementbyID 是不同的. 同样,变 ...