题目链接:

http://acm.hdu.edu.cn/showproblem.php?pid=3549


题目大意:

有向图求最大流


解题过程:

关于为什么增加流量时要增加一个反向负流量的边纠结了很久,最后还是想通了,其他就没难点了。


题目分析:

增广路算法,每一次尽可能的添加一条增广路,直到不能添加增广路为止,不过有个特殊的地方,按照挑战书上的说法是,可以把之前的流推回去。按照我的理解大概是现在的这个新加的增广路用之前流量的路径,然后把之前流的路径推回去,然后之前的流量寻找一个新的路径。


AC代码:

#include <bits/stdc++.h>
using namespace std;const int MAX = 20, INF = 0x3f3f3f3f;struct Node {//to表示要指向的点,cap是剩余流量,rev是指这条边的方向边是to这个点的第几条边int to, rev, cap;Node(int to, int cap, int rev):to(to), cap(cap), rev(rev) {}
};vector<Node> edge[MAX];
int vis[MAX];void add_edge(int u, int v, int w) {//添加边和反向边edge[u].push_back(Node(v, w, edge[v].size()));edge[v].push_back(Node(u, 0, edge[u].size()-1));
}int dfs(int u, int end, int f) {if (u == end)return f;vis[u] = 1;for (int i = 0; i < edge[u].size(); i++) {Node& e = edge[u][i];if (!vis[e.to] && e.cap > 0) {int d = dfs(e.to, end, min(f, e.cap));//如果找到了增广路就返回if (d > 0) {//正向边容量减少的时候,反向边要增加容量e.cap -= d;edge[e.to][e.rev].cap += d;return  d;}}}return 0;
}int max_flow(int s, int t) {int flow = 0;for (;;) {memset(vis, 0, sizeof(vis));int f = dfs(s, t, INF);//如果找不到增广路了,那么当前就是最大流了,返回if (f == 0)return flow;flow += f;}
}int main() {int T;scanf("%d", &T);for (int cases = 1; cases <= T; cases++) {int n, m;scanf("%d %d", &n, &m);for (int i = 0; i <= n; i++)edge[i].clear();for (int i = 0; i < m; i++) {int u, v, w;scanf("%d %d %d", &u, &v, &w);add_edge(u, v, w);}printf("Case %d: %d\n", cases, max_flow(1, n));}
}

转载于:https://www.cnblogs.com/ACMFish/p/7222838.html

HDUOJ3549 - Flow Problem(网络流+最大流最小割+模板)相关推荐

  1. 网络流 最大流最小割与最小费用流

    目录 [镇楼] [引入] [基本定义和概念] [最大流算法] [最小割] [最小费用最大流] [引用] [镇楼]   天啦真的好好懂!!!麻麻再也不用担心我的网络流学习啦!!! [引入] 首先,我们来 ...

  2. hdu 3549 Flow Problem(最大流模板题)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3549 Problem Description Network flow is a well-known ...

  3. Algo_网络流,最大流最小割总结, 残留网络性质,知识点总结Tips

    catalog 最大流算法 错误点 错误点 残留网络的 可叠加性 流网络的 点和边 最小割定理证明 version_0 version_1 最大流算法 错误点 for( int i = 0; i &l ...

  4. hihocoder 网络流二·最大流最小割定理

    网络流二·最大流最小割定理 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi:在上一周的Hiho一下中我们初步讲解了网络流的概念以及常规解法,小Ho你还记得内容么? ...

  5. 洛谷P1344 [USACO4.4]追查坏牛奶Pollutant Control(网络流, 最大流最小割)

    初学网络流:http://blog.csdn.net/wzw1376124061/article/details/55001639 最大流最小割:http://blog.csdn.net/wzw137 ...

  6. 算法小白理解最大流最小割(Maximum flow Minimum cut)问题

    网上流传的关于最大流最小割问题的全都是索然无味 的一些讲课视频,当然如果你英语能力很强,直接看外国的视频也十分好理解,但于我这种理工科渣渣来说,看懂那种专业的讲课视频是不可能的,不存在的,所以把自己对 ...

  7. 最大流最小割定理(max flow/min cut theory)

    百度文库里面有个地址,讲的比较详细. http://wenku.baidu.com/link?url=gPXhYCduLNgZaOkKIltNDAgPGwuMTpRX7a0utvVFuqDAP9o1j ...

  8. 流网络的最小割问题c语言,网络流基础-最大流最小割定理

    最大流最小割定理,指网络流的最大流等于其最小割. 最大流指符合三个性质的前提下,从S到T能流过的最大流量. 最小割指符合割的定义,最小的割容量. 求最大流: 不断寻找增广路,计算能增加的最小流量,然后 ...

  9. 洛谷 P1646 [国家集训队]happiness 网络流 最小割 Dinic+当前弧优化

    题目链接: https://www.luogu.com.cn/problem/P1646 参考博客: https://siyuan.blog.luogu.org/solution-p1646 算法:网 ...

最新文章

  1. Windows 8部署系列PART2:部署先决条件准备
  2. java speex回声消除_speex 回声消除的用法
  3. 学python可以做什么知乎-Python学到什么程度可以面试工作?
  4. Cloud Native Computing Foundation Welcomes the NATS Messaging Protocol into the Fold
  5. SNMP功能开发简介 二 net-snmp源码分析报文处理流程图
  6. Vue使用jsPdf将页面导出成pdf文件
  7. python 多版本管理
  8. Nginx 简单的cpu配置
  9. 最容易被忽视的学习材料--技术标准 (z)
  10. Linux下安装nginx (tar解压版安装) nginx1.16.1
  11. [前台]---js中去掉双引号或者单引号
  12. matlab旋转机械转子故障信号仿真,旋转机械转子不对中故障诊断技术研究解说.docx...
  13. php记一笔在线记账管理系统源码
  14. 语音合成论文与韩国小哥“撞车”后续:英伟达“赶紧”把代码开源了
  15. @Configuration、@Bean 装配组件 与 @Resource 与 @Autowired 与 @Qualifier 、@Primary 获取组件
  16. 通过网络使用YAML
  17. 计算机程序设计员国家职业资格三级(高级)操作技能考核试卷-四川考场
  18. 使用 html 来创建站点,怎样使用HTML创建免费网站
  19. 坚定推动DDD落地的企业,70%代码效率翻倍了!
  20. 解决div高度不自动增加的问题

热门文章

  1. C语言单链表的应用,单链表应用
  2. 入党对程序员有什么用_为什么程序员都喜欢用两个大屏显示器?网友:一个复制一个粘贴...
  3. web myeclipse为什么连接不上css_Web技巧 (03)
  4. 各大厂商CTR广告预估模型的优缺点对比
  5. Python+Flask京东电商价格实时监控,邮件提醒
  6. java 是怎么在中删除下拉列表_java中下拉菜单如何清空
  7. Kettle调度和监控
  8. 如何制作一款HTML5 RPG游戏引擎——第二篇,烟雨+飞雪效果
  9. Android adb “push pull”中文支持解决方案
  10. Eclipse用法和技巧四:生成说明文档1