//500ms 秒掉洛谷推流问题
#include <algorithm>
#include <iostream>
#include <cstring>
#include <vector>
#include <queue>
using namespace std;
typedef long long LL;
typedef long long F_type;
const int MAXN = 1.2e3 + 10, INF = 0x3f3f3f3f;
const LL LINF = (LL)INF << 32 | INF;
struct Edge
{int v, rev;F_type cap;Edge(int a, F_type b, int c) : v(a), rev(c), cap(b) {}
};
const F_type maxf=LINF;
F_type exflow[MAXN];
int h[MAXN], cnt[MAXN];
int ht, N, S, T, labelcnt;
vector<Edge> G[MAXN];
vector<int> hq[MAXN];
void clear(int n = MAXN - 1)
{ht = labelcnt = 0;for (int i = 0; i <= n; i++)G[i].clear();
}
void addEdge(int u, int v, F_type cap)
{G[u].emplace_back(v, cap, G[v].size());G[v].emplace_back(u, 0, G[u].size() - 1);
}
void update(int u, int newh)
{++labelcnt;if (h[u] != N + 1)--cnt[h[u]];h[u] = newh;if (newh == N + 1)return;++cnt[ht = newh];if (exflow[u] > 0)hq[newh].push_back(u);
}
void globalRelabel()
{queue<int> q;for (int i = 0; i <= N + 1; i++)hq[i].clear();for (int i = 0; i <= N; i++)h[i] = N + 1, cnt[i] = 0;q.push(T);labelcnt = ht = h[T] = 0;while (!q.empty()){int u = q.front();q.pop();for (Edge& e : G[u]){if (h[e.v] == N + 1 && G[e.v][e.rev].cap){update(e.v, h[u] + 1);q.push(e.v);}}ht = h[u];}
}
void push(int u, Edge& e)
{if (exflow[e.v] == 0)hq[h[e.v]].push_back(e.v);F_type df = min(exflow[u], e.cap);e.cap -= df;G[e.v][e.rev].cap += df;exflow[u] -= df;exflow[e.v] += df;
}
void discharge(int u)
{int nxth = N + 1;for (Edge& e : G[u])if (e.cap){if (h[u] == h[e.v] + 1){push(u, e);if (exflow[u] <= 0)return;}elsenxth = min(nxth, h[e.v] + 1);}if (cnt[h[u]] > 1)update(u, nxth);elsefor (; ht >= h[u]; hq[ht--].clear()){for (int& j : hq[ht])update(j, N + 1);}
}
F_type maxFlow(int s, int t, int n)
{S = s, T = t, N = n;memset(exflow, 0, sizeof(exflow));exflow[S] = maxf;exflow[T] = -maxf;globalRelabel();for (Edge& e : G[S])push(S, e);for (; ht >= 0; --ht){while (!hq[ht].empty()){int u = hq[ht].back();hq[ht].pop_back();discharge(u);if (labelcnt > (N << 2))globalRelabel();}}return exflow[T] + maxf;
}int main()
{int n, m, s, t, u, v, w;scanf("%d%d%d%d", &n, &m, &s, &t);while (m--){scanf("%d%d%d", &u, &v, &w);addEdge(u, v, w);}printf("%d", maxFlow(s, t, n));return 0;
}

网络流--最大流--hlpp(预流推进)模板相关推荐

  1. 最大流算法——预流推进

    http://xingzheqiang.blog.163.com/blog/static/20561012520127464654159/ 背景知识不明者找Google. -------------- ...

  2. [洛谷P4722]【模板】最大流 加强版 / 预流推进

    会$TLE$... C++ Code:(HLPP) #pragma GCC optimize(3) #pragma GCC optimize("unroll-loops") #in ...

  3. 算法学习笔记:网络流#4——ISAP 求解最大流

    算法学习笔记:网络流#4--ISAP 求解最大流 1. 前言 2. 模板 2.1 详解 2.2 正确性证明 2.3 代码 3. 算法对比 3.1 一般数据下的对比 3.2 特殊数据下的对比 4. 总结 ...

  4. 最大流——HLPP算法

    名字长,跑得快:最高标号预流推进算法! 最高标号预流推进算法High Level Preflow Push是最大流里最快的算法.我是偶然在网上看到这个算法的,其时间复杂度达到了令人发指的O(|E|²* ...

  5. .net 流(Stream) - 文件流、内存流、网络流

    一.文件流 FileStream FileStream流继承与Stream类,一个FileStream类的实例实际上代表一个文件流,使用FileStream类可以对文件系统上是文件进行读取.写入.打开 ...

  6. C#数据流:文件流、内存流、网络流

    全栈工程师开发手册 (作者:栾鹏) c#教程全解 C#编程中数据流的使用一直不很熟练,没有一个系统的认识,但是它的重要性显然不言而喻.System.IO下的Stream类是所有数据流的基类,当我们对数 ...

  7. RTSP协议详解与实时流视频预览-第6/11季视频课程-海思-朱有鹏-专题视频课程

    RTSP协议详解与实时流视频预览-第6/11季视频课程-海思-383人已学习 课程介绍         本季详细讲解RTSP协议的技术细节,并且编程实现基于RTSP协议的实时视频流传输,在局域网内浏览 ...

  8. 学习笔记:网络流基础:理解最大流/最小割定理 (蒋炎岩)

    网络流基础:理解最大流/最小割定理 蒋炎岩 课程链接 有向图的基本概念: 问题引入 直观感受反例 引入重要概念: 割的示例 小结 再来一个问题 例子 可以找到一条路径的情况 可以找到两条路径的情况 问 ...

  9. 使用layui在前端接收后端的图片流来显示二维码,在前端使用iframe接收后端流来预览pdf

    消息弹框的形式 因为我是在生成二维码之后,用zxing的工具类输出的流 所以这里介绍一下我用到的工具类的依赖 gradle // https://mvnrepository.com/artifact/ ...

  10. 网络流__4 上下界可行流

    网络流 __4 上下界可行流 对于容量有上下界规范的网络流问题 无源汇上下界可行流 n个点m条边的有向图,每条边有一个流量下界和流量上界规范,求是否存在一个可行流 设原网络为(G,F),变换后网络为( ...

最新文章

  1. 介绍一本零基础入门Python数据分析的书
  2. c#获取DataTable某一列不重复的值,或者获取某一列的所有值
  3. ninject 的 实现 的 理解
  4. 剑指offer之36-40题解
  5. Android之Debug运行项目一直卡在Debug界面(can‘t bind to local 8066 for debug)
  6. SpringCloud与Seata分布式事务初体验
  7. 波兰表达式(前序表达式)的计算(栈)
  8. IIS+ASP部署相关
  9. 换到GitHub 博客了
  10. ExtJs学习笔记(2)_Basic GridPanel[基本网格]
  11. scala入门学习之类的使用
  12. 办公软件excel表格_EXCEL表格模板下载推荐?办公资源网优质海量素材资源免费下载...
  13. 怎样学好高中数学,2019高考数学真题解题技巧
  14. Unity如何接入应用内购In-AppPurchase
  15. erp仓储管理 java,关于java:ERP仓库管理的操作与设计开源软件诞生20
  16. 微博快捷登录提示21322重定向地址不匹配(解决方案)
  17. 源码网站合集[细选过的][转贴]
  18. 远程视频监控组网方案:4G工业设备实现林区中心端汇聚!
  19. Vue动态修改网页浏览器标签的标题和图标
  20. ABCD四个人说真话的概率都是1/3。假如A声称B否认C说D是说谎了,那么D说过的那句话真话的概率是多少

热门文章

  1. Android开发之EditText监听软键盘清除(输入是否清除)
  2. android开发之EditText默认hint字体大小
  3. 获取Android手机的分辨率通过ADB命令
  4. php 如何设计索引_Mysql学习浅谈mysql的索引设计原则以及常见索引的区别
  5. Redis学习(一)——
  6. Spring Security认证过程
  7. 病毒行为分析初探(三)
  8. AssetBundle Workflow
  9. 关于C语言中递归的一点点小问题
  10. Android内存泄漏