ISAP求最大流,敲了一发板子,无压行,教程略去。转载请随意。

 #include <cstdio>
 #include <cstring>
 #include <algorithm>
 #include <vector>
 using namespace std;

 ;
 const int inf = 0x33333333;

 struct edge {
     int to, rev, cap;
 };

 int n;
 vector<edge> G[maxn];

 void add_edge(int u, int v, int cap) {
     G[u].push_back((edge){v, (int)G[v].size(), cap});
     G[v].push_back((edge){u, (, });
 }

 int isap(int s, int t) {
     //init
     static int h[maxn];    //距离标号
     static int cnt[maxn];  //距离标号计数
     static int cur[maxn];  //当前弧
     static int pv[maxn];   //上一个顶点
     static int pe[maxn];   //上一条弧
     memset(h, , sizeof h);
     memset(cnt, , sizeof cnt);
     cnt[] = n;
     memset(cur, , sizeof cur);
     //solve
     int u = s;
     ;
     while(true) {
         if(u == t) {
             //augment
             int newflow = inf;
             for(int x = t; x != s; x = pv[x]) {
                 edge &e = G[pv[x]][pe[x]];
                 newflow = min(newflow, e.cap);
             }
             flow += newflow;
             for(int x = t; x != s; x = pv[x]) {
                 edge &e = G[pv[x]][pe[x]];
                 e.cap -= newflow;
                 G[x][e.rev].cap += newflow;
             }
             u = s;
         }
         bool did = false;
         for(int &i = cur[u]; i < (int)G[u].size(); ++i) {
             edge &e = G[u][i];
              && h[u] == h[e.to] + ) {
                 //advance
                 did = true;
                 pv[e.to] = u;
                 pe[e.to] = i;
                 u = e.to;
                 break;
             }
         }
         if(!did) {
             //retreat
             ;
             ; i < (int)G[u].size(); ++i) {
                 edge &e = G[u][i];
                 ) {
                     newh = min(newh, h[e.to] + );
                 }
             }
             ) {
                 //gap
                 break;
             }
             ++cnt[h[u] = newh];
             if(u != s) {
                 u = pv[u];
             }
         }
     }
     return flow;
 }

 int main(void) {
     int m, source, sink;
     scanf("%d%d%d%d", &n, &m, &source, &sink), --source, --sink;
     ; i < m; ++i) {
         int from, to, cap;
         scanf("%d%d%d", &from, &to, &cap), --from, --to;
         add_edge(from, to, cap);
     }
     printf("%d\n", isap(source, sink));
     ;
 }

[板子]ISAP的更多相关文章

  1. 最大流算法之ISAP

    序: 在之前的博文中,我解释了关于最大流的EK与Dinic算法,以及它们的STL/非STL的实现(其实没什么区别).本次讲解的是ISAP算法.'I',指 inproved,也就是说ISAP其实是SAP ...

  2. 【最大流ISAP】洛谷P3376模板题

    题目描述 如题,给出一个网络图,以及其源点和汇点,求出其网络最大流. 输入输出格式 输入格式: 第一行包含四个正整数N.M.S.T,分别表示点的个数.有向边的个数.源点序号.汇点序号. 接下来M行每行 ...

  3. poj-1459-最大流dinic+链式前向星-isap+bfs+stack

    title: poj-1459-最大流dinic+链式前向星-isap+bfs+stack date: 2018-11-22 20:57:54 tags: acm 刷题 categories: ACM ...

  4. ISAP 最大流 最小割 模板

    虽然这道题用最小割没有做出来,但是这个板子还是很棒: #include<stdio.h> #include<math.h> #include<string.h> # ...

  5. P3376 【模板】网络最大流( Edmonds-krap、Dinic、ISAP 算法)

    P3376 [模板]网络最大流( Edmonds-krap.Dinic.ISAP 算法) 题目描述 如题,给出一个网络图,以及其源点和汇点,求出其网络最大流. 输入格式 第一行包含四个正整数N.M.S ...

  6. HDU 4280 Island Transport(HLPP板子)题解

    题意: 求最大流 思路: \(1e5\)条边,偷了一个超长的\(HLPP\)板子.复杂度\(n^2 \sqrt{m}\).但通常在随机情况下并没有isap快. 板子: template<clas ...

  7. [板子]最小费用最大流(Dijkstra增广)

    最小费用最大流板子,没有压行.利用重标号让边权非负,用Dijkstra进行增广,在理论和实际上都比SPFA增广快得多.教程略去.转载请随意. #include <cstdio> #incl ...

  8. [板子]倍增LCA

    倍增LCA板子,没有压行,可读性应该还可以.转载请随意. #include <cstdio> #include <cstring> #include <algorithm ...

  9. UP Board 人若有大胆,板子就很惨:首次上电开机失败

    前言 原创文章,转载引用务必注明链接. 注意:拍照自带抖动功能,画质大家凑合着看.冬日天气干燥,手触摸板子前建议流水洗手或者握持大体积导电体将静电放走. 本文使用Markdown写成,为获得更好的阅读 ...

随机推荐

  1. TeamCity : 自动触发 Build

    创建了 build 的配置以后,您既可以手动点击 "Run" 按钮来触发一次 build 过程,也可以通过 Triggers 配置实现自动触发 build 过程.一个 trigge ...

  2. oracle操作符

    Oracle中算术操作符(+)(-)(*)(/) 值得注意的是:/ 在oracle中就相当于显示中的除法 5/2 = 2.5 比较操作符: 其中等号可以换成其他运算符:(后面为该操作符的单条件查询样例 ...

  3. js正则表达式校验非负浮点数:^[1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0$

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  4. Java内部类final语义实现

    本文描述在java内部类中,经常会引用外部类的变量信息.但是这些变量信息是如何传递给内部类的,在表面上并没有相应的线索.本文从字节码层描述在内部类中是如何实现这些语义的. 本地临时变量 基本类型 fi ...

  5. 如何实现一个php框架系列文章【2】实现类的自动加载

    根据前一篇文章的设计原则,我们暂时把php文件分为3类,类名和文件名都遵守如下约定.   类名 文件名 路径 模型类m {$app}Mod  {$app}.mod.php {$app}/model   ...

  6. yii框架安装心得

    最近在学习yii框架, 现在将遇到的一些问题和解决方法写出来与大家分享. yii框架的安装: 下载yii框架之后, 打开文件运行init.bat文件, 如果闪退就打开php的扩展(php_openss ...

  7. Cobar + MySQL 技术验证(li)

    一.简介 Cobar是一个对数据进行拆分后进行分布式存储的产品,可以支持使用后台的 MySQL或者Oracle数据库,通过配置,将数据按照一定规则存储入不同的数据库中.即用分布式数据库代替了集中式数据 ...

  8. hibernate -- HQL语句总结

    1. 查询整个映射对象所有字段 //直接from查询出来的是一个映射对象,即:查询整个映射对象所有字段 String hql = "from Users"; Query query ...

  9. 如何:加载分页结果(WCF 数据服务)

    WCF 数据服务 允许数据服务限制单个响应源中返回的实体数.在此情况下,源中的最后一项包含指向下一页数据的链接.通过调用执行 DataServiceQuery 时返回的 QueryOperationR ...

  10. 浅谈Hybrid技术的设计与实现

    前言 浅谈Hybrid技术的设计与实现 浅谈Hybrid技术的设计与实现第二弹 浅谈Hybrid技术的设计与实现第三弹——落地篇 随着移动浪潮的兴起,各种APP层出不穷,极速的业务扩展提升了团队对开发 ...