HDU 3549 Flow Problem(最大流模版EK算法)
题目链接
第一道最大流,赤裸裸的模版题,刚好可以熟悉模版用。今天看了一下最大流,就看了一个EK算法,感觉有点和二分图匹配算法有点相似,对于最大流问题有点了解了,不过为什么这么做,也不是 很懂,只是把代码给敲了一遍,以后慢慢学习。
EK算法,过程是先BFS找到str到end的一条路,然后每条路上的流量(key[][]记录)取这些路中流量的最小值(flow[]记录),在这条路上的流量都减去这个值,然后建立反向边,然后继续找增广路,直到找不到为止。有前驱的结点不会再找了,所以几遍之后肯定找不到了。
1 #include <cstdio> 2 #include <cstring> 3 #include <string> 4 #include <cmath> 5 #include <queue> 6 using namespace std; 7 #define INF 0x7fffffff 8 int key[101][101]; 9 int path[101],flow[101],n,m,str,end; 10 queue<int>que; 11 int bfs() 12 { 13 int i,t; 14 while(!que.empty()) que.pop(); 15 memset(path,-1,sizeof(path)); 16 path[str] = 0; 17 flow[str] = INF;//初始化 18 que.push(str); 19 while(!que.empty())//BFS 20 { 21 t = que.front(); 22 que.pop(); 23 if(t == end) break;//已经找到end了 24 for(i = 1;i <= n;i ++) 25 { 26 if(i != str&&key[t][i]&&path[i] == -1) 27 { 28 flow[i] = flow[t] < key[t][i] ? flow[t]:key[t][i];//记录流量 29 que.push(i); 30 path[i] = t;//记录前驱 31 } 32 } 33 } 34 if(path[end] == -1)//找不到路径时 35 return -1; 36 else 37 return flow[end]; 38 } 39 int EK() 40 { 41 int ans = 0,pre,now,step; 42 while((step = bfs()) != -1) 43 { 44 ans += step; 45 now = end; 46 while(now != str) 47 { 48 pre = path[now]; 49 key[now][pre] += step; 50 key[pre][now] -= step; 51 now = pre; 52 } 53 } 54 return ans; 55 } 56 int main() 57 { 58 int i,t,sv,ev,w,num = 0; 59 scanf("%d",&t); 60 while(t--) 61 { 62 num ++; 63 memset(key,0,sizeof(key)); 64 scanf("%d%d",&n,&m); 65 for(i = 1;i <= m;i ++) 66 { 67 scanf("%d%d%d",&sv,&ev,&w); 68 key[sv][ev] += w; 69 } 70 str = 1;end = n; 71 printf("Case %d: %d\n",num,EK()); 72 } 73 return 0; 74 }
转载于:https://www.cnblogs.com/naix-x/archive/2012/11/20/2779611.html
HDU 3549 Flow Problem(最大流模版EK算法)相关推荐
- HDU 3549 Flow Problem
网络最大流模版题,用了(Ford-Fulkerson算法) 代码不贴了,模版见我博客 http://www.cnblogs.com/zufezzt/p/4585752.html 转载于:https: ...
- HDU 3549 Flow Problem (dinic模版 isap模版)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3549 题意: 给你一个有向图,问你1到n的最大流. dinic模版 (n*n*m) 1 #includ ...
- hdu 3549 Flow Problem(最大流模板题)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3549 Problem Description Network flow is a well-known ...
- 网络流--最大流--HDU 3549 Flow Problem
题目链接 Problem Description Network flow is a well-known difficult problem for ACMers. Given a graph, y ...
- HDU 3549 Flow Problem (网络流板子)
Dinic 邻接表 (抄袭神牛的板子 传送门:https://blog.csdn.net/u013480600/article/details/38796521) 代码: #include <s ...
- [hdu3549]Flow Problem(最大流模板题)
解题关键:使用的挑战程序设计竞赛上的模板,第一道网络流题目,效率比较低,且用不习惯的vector来建图. 看到网上其他人说此题有重边,需要注意下,此问题只在邻接矩阵建图时会出问题,邻接表不会存在的,也 ...
- Poj(1459),最大流,EK算法
题目链接:http://poj.org/problem?id=1459 Power Network Time Limit: 2000MS Memory Limit: 32768K Total Su ...
- hdu 3549 最大流(EK实现)
Problem: http://acm.hdu.edu.cn/showproblem.php?pid=3549 题目都直接说求最大流了,还需要做什么 数据这么弱,直接套最大流模版 #include&l ...
- 图论 —— 网络流 —— 最大流 —— FF 算法与 EK 算法
[概述] FF 算法与 EK 算法是求解最大流的一般增广路方法,其时间复杂度均为 O(n*m*m) Ford-Fulkerson 算法是求解最大流的最基础的算法,其核心思想是增广路定理:网络达到最大流 ...
最新文章
- 一家创业公司的5年架构变迁史
- ATG中的定时Job处理
- MongoDB学习系列6: mongodump
- 如何让MFC编写的应用程序(用VC6.0开发)能在别的电脑上运行
- Visual Studio 2017 Android 调试无法连接到虚拟机
- 团队行为心理学读书笔记(2)招聘背后的心理学
- oracle查看jdk文档_Oracle JDK 9 Early Access文档已更新
- DateTime字段控件值显示短格式的做法
- 《Java从入门到放弃》框架入门篇:hibernate中的多表对应关系(二)
- 嵌入式Linux内核,文件系统的制作
- 手机喇叭积灰,一段音波就能清理干净
- APPInventor网络数据库浏览器(TinyWebDB查询API)
- 用友t6服务器端操作系统,用友t6远程服务器
- 基于WMI获取USB设备信息(即获取插即用设备信息)System.Management.ManagementObjectSearcher--ManagementObjectCollection
- 聚类分析(K-means算法)
- 获取实时手机验证码并同步到邮箱服务器
- 技术丨说一说微信第三方平台的初步集成
- 为什么毕业论文要查重?
- 手绘日漫版的新垣结衣见过没?这个开源动漫生成器让你的照片秒变
- Python开源项目目录结构参考
热门文章
- docker上你必须会的那些命令
- php rabbmq教程_RabbitMQ+PHP 教程一(Hello World)
- Linux shell 学习笔记(10)— 处理用户输入(命令行读取参数、读取用户输入、超时处理)
- linux环境下快速配置hadoop集群免密登录
- Maven Eclipse Run as 命令
- os.environ[CUDA_DEVICE_ORDER] = PCI_BUS_ID os.environ[CUDA_VISIBLE_DEVICES] = 0
- AI中pass架构设计优化
- 使用Apache TVM将机器学习编译为WASM和WebGPU
- deeplearning算法优化原理
- MindInsight训练可视整体设计介绍