[板子]ISAP
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的更多相关文章
- 最大流算法之ISAP
序: 在之前的博文中,我解释了关于最大流的EK与Dinic算法,以及它们的STL/非STL的实现(其实没什么区别).本次讲解的是ISAP算法.'I',指 inproved,也就是说ISAP其实是SAP ...
- 【最大流ISAP】洛谷P3376模板题
题目描述 如题,给出一个网络图,以及其源点和汇点,求出其网络最大流. 输入输出格式 输入格式: 第一行包含四个正整数N.M.S.T,分别表示点的个数.有向边的个数.源点序号.汇点序号. 接下来M行每行 ...
- poj-1459-最大流dinic+链式前向星-isap+bfs+stack
title: poj-1459-最大流dinic+链式前向星-isap+bfs+stack date: 2018-11-22 20:57:54 tags: acm 刷题 categories: ACM ...
- ISAP 最大流 最小割 模板
虽然这道题用最小割没有做出来,但是这个板子还是很棒: #include<stdio.h> #include<math.h> #include<string.h> # ...
- P3376 【模板】网络最大流( Edmonds-krap、Dinic、ISAP 算法)
P3376 [模板]网络最大流( Edmonds-krap.Dinic.ISAP 算法) 题目描述 如题,给出一个网络图,以及其源点和汇点,求出其网络最大流. 输入格式 第一行包含四个正整数N.M.S ...
- HDU 4280 Island Transport(HLPP板子)题解
题意: 求最大流 思路: \(1e5\)条边,偷了一个超长的\(HLPP\)板子.复杂度\(n^2 \sqrt{m}\).但通常在随机情况下并没有isap快. 板子: template<clas ...
- [板子]最小费用最大流(Dijkstra增广)
最小费用最大流板子,没有压行.利用重标号让边权非负,用Dijkstra进行增广,在理论和实际上都比SPFA增广快得多.教程略去.转载请随意. #include <cstdio> #incl ...
- [板子]倍增LCA
倍增LCA板子,没有压行,可读性应该还可以.转载请随意. #include <cstdio> #include <cstring> #include <algorithm ...
- UP Board 人若有大胆,板子就很惨:首次上电开机失败
前言 原创文章,转载引用务必注明链接. 注意:拍照自带抖动功能,画质大家凑合着看.冬日天气干燥,手触摸板子前建议流水洗手或者握持大体积导电体将静电放走. 本文使用Markdown写成,为获得更好的阅读 ...
随机推荐
- DOM 事件深入浅出(二)
在DOM事件深入浅出(一)中,我主要给大家讲解了不同DOM级别下的事件处理程序,同时介绍了事件冒泡和捕获的触发原理和方法.本文将继续介绍DOM事件中的知识点,主要侧重于DOM事件中Event对象的属性 ...
- JSP 9大内置对象详解
一.内置对象特点: 1.由JSP规范提供,不用编写者实例化. 2. 通过Web容器实现和管理 3.所有JSP页面均可使用 4.只有在脚本元素的表达式或代码段中才可使用(<%=使用内置对象%> ...
- 自己封装的一个原生JS拖动方法。
代码: function drag(t,p){ var point = p || null, target = t || null, resultX = 0, resultY = 0; (!point ...
- MAC终端命令行下用sublime、vscode、atom打开文件或目录
要知道,有时候一些小技巧,能极大的加大我们的工作效率. 在MAC下开发,用的最多的还是终端,我的终端环境是iterm2+ohmyzsh:步入正题前先给大家介绍几个小技巧: 第一个: 打开findle, ...
- 『.NET Core CLI工具文档』(十四)dotnet-install 脚本参考
说明:本文是个人翻译文章,由于个人水平有限,有不对的地方请大家帮忙更正. 原文:dotnet-install scripts reference 翻译:dotnet-install 脚本参考 名称 d ...
- 异步Socket 客户端部分
using System; using System.Collections.Generic; using System.Text; using System.Net.Sockets; using S ...
- Java传值和传址
调用函数时,传的参数过去可能是传值,也可能是传址.如果是传值,函数内部的操作对参数的值没有影响:如果是传址,函数内部的操作是对参数指向的内存进行操作,会影响参数的值. Java到底是传值还是传址?用下 ...
- 细谈Slick(5)- 学习体会和将来实际应用的一些想法
通过一段时间的学习和了解以及前面几篇关于Slick的讨论后对Slick这个函数式数据库编程工具有了些具体的了解.回顾我学习Slick的目的,产生了许多想法,觉着应该从实际的工作应用角度把我对Slick ...
- wamp集成环境开启rewrite伪静态支持
wamp集成环境在安装完后,默认是没有开启伪静态的,所以有时把项目部署进去时如果源码里包含.htaccess文件的话,可能会出现500错误,这一般是因为不支持伪静态造成的,解决这个问题的办法就是开启伪 ...
- IE7 浏览器下面设置text-indent属性变成margin属性BUG
问题来源 今天做项目的时候发现了一个问题,在使用text-indent属性对元素进行缩进是发现在360浏览器下发生了元素偏移,跟margin-left的效果一样,打开f12发现3607.1浏览采用的i ...