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. .NET DateTime类型变量作为参数时设置默认值

    一个小的 Tips. .NET 中函数参数的默认值需要是编译时常量.如果参数是引用类型,可以设置Null,如果是值类型,可以设置相应的编译时常量,如整型可以用整数,但对于DateTime(结构体,值类 ...

  2. Eclipse代码和xml文件的智能提示

    一.代码智能提示 Windows → Preferences → Java→ Editor → Content Assist 将 Auto activation delay(ms): 改为 0 将 A ...

  3. win10 下visual studio 2015 在调试模式下不能跟踪源文件

    win10 下visual studio 2015 在调试模式下不能跟踪源文件,只要一调试就会关闭(隐藏)打开的文档,非常不方便.经过一番折腾,发现是配置的问题. 如果安装多个版本的VS,请删除对应版 ...

  4. jQuery拖动剪裁图片作为头像

    图片上传是许多网站的一个常用的功能,有时需要对上传的图片做初步的选择裁剪,比如上传头像.下面就是一个使用HTML5+jQuery实现的图片上传裁剪特效,可以对选择要上传的图片做缩小.放大.拖动和裁剪, ...

  5. C++02.访问控制

    1.class是struct的扩展,它包括数据成员和成员函数. 2.在C++中,有三种访问权限: (1)private:默认,只供类内部的函数使用. (2)public:类外的程序可以使用. (3)p ...

  6. AgilePoint实例属性修改

    流程实例中的参数存放在WF_CUSTOM_ATTRS表的WF_CUSTOM_ATTRS字段,为ntext类型,里面存放的是XML,不能直接修改   update [APData].[dbo].[WF_ ...

  7. iOS 10对隐私权限的管理(必须要改否则会crash)

    比如访问的摄像头.麦克风等硬件,都需要提前请求应用权限.允许后才可以使用,或者现在要提前声明,虽然以往要求不严格.比如在iOS10中访问通讯录时,强制必须在Info.plist中加入NSContact ...

  8. ViewPager与PagerAdapter

    ViewPager是一个可以用来滑动内部View的组件,他有一个老搭档PagerAdapter,我们这次就来看看他们这两位拍档的本事. 我们要使用ViewPager与PagerAdapter结合 首先 ...

  9. Junit单元测试

    写一个被测试的类 这是类中的一些方法,将一个16进制转化为10进制 reckon()为转化的主要方法,返回结果为10进制数 judge()判断字符是否在0-9,A-F之间,并将字符转化为0-15之中的 ...

  10. text-overflow

    text-overflow:clip | ellipsis 默认值:clip 适用于:所有元素 clip: 当对象内文本溢出时不显示省略标记(...),而是将溢出的部分裁切掉. ellipsis: 当 ...