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 ...
随机推荐
- 关于asp.net C# 导出Excel文件 打开Excel文件格式与扩展名指定格式不一致的解决办法
-----转载:http://blog.csdn.net/sgear/article/details/7663502 关于asp.net C# 导出Excel文件 打开Excel文件格式与扩展名指定格 ...
- IIS 配置问题解决
无法识别的属性“targetFramework”.请注意属性名称区分大小写. 配置错误 说明: 在处理向该请求提供服务所需的配置文件时出错.请检查下面的特定错误详细信息并适当地修改配置文件. 分析器错 ...
- GitHub-修改以下host-ip可加快访问速度
#GitHub START 207.97.227.239 github.com 204.232.175.94 gist.github.com 107.21.116.220 help. ...
- Linux makefile 教程 非常详细,且易懂(转)
转自:http://blog.chinaunix.net/uid-27717694-id-3696246.html 原文地址:Linux makefile 教程 非常详细,且易懂 作者:Deem_pa ...
- 10_RHEL安装搜狗输入法
首先需要安装相关源 1.加入EPEL源 EPEL7几乎是必备的源: $ sudo yum install epel-release 2.添加mosquito-myrepo源 mosquito-myre ...
- javascript 键值对
<script type="text/javascript"> var arr = new Array(); arr['cn'] = '中国'; arr['usa'] ...
- HTML5拖放
HTML5拖放 <!doctype html> <html> <head> <meta charset="UTF-8"> <t ...
- mysql的sql优化案例
前言 mysql的sql优化器比较弱,选择执行计划貌似很随机. 案例 一.表结构说明mysql> show create table table_order\G***************** ...
- jdom学习:读取xml文件
用JDOM读取XML文件需先用org.jdom.input.SAXBuilder对象的build()方法创建Document对象,然后用Document类.Element类等的方法读取所需的内容.IB ...
- Can't connect to local MySQL server through socket
今天上午在测试代码的时候发现在执行写mysql的时候总是超时,然后失败,使用mysql命令 show processlist; 发现有两条update的sql语句已经执行了很长时间,以为是这两个程序把 ...