[板子]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写成,为获得更好的阅读 ...
随机推荐
- 游戏启示录 关于Update的相关问题
游戏启示录 关于Update的相关问题 这里说的Update是指的游戏的主循环.一般情况下.为了程序的方便控制我们一般只会有一个主循环.所有的游戏逻辑都会在这一个循环中完成.(额,其实这么做有点浪费. ...
- 使用roslyn代替MSBuild完成解决方案编译
原本我是使用批处理调用 MSBuild 完成解决方案编译的,新版的 MSBuild 在 Visual Studio 2015 会自带安装. 当然在Visual Studio 2015 中,MSBuil ...
- Attribute操作的性能优化方式
Attribute是.NET平台上提供的一种元编程能力,可以通过标记的方式来修饰各种成员.无论是组件设计,语言之间互通,还是最普通的框架使 用,现在已经都离不开Attribute了.迫于Attribu ...
- screen命令
基本用法 screen -S testname 在这里面执行命令,即使终端突出,进程也不会断掉 screen -list查看有哪些screen screen -r testname 恢复
- 如何解决例如i++的线程不安全性
AtomicBoolean.AtomicInteger.AtomicLong.AtomicReference 各种原子性关键字,可以解决比如i++的线程不安全性的因素
- axis2+struts拦截地址冲突问题
axis2和struts在整合过程中,struts会把axis的地址也拦截了,默认当成一个action处理, 会因为找不到action而报错: <!-- struts配置 --> < ...
- Android 绘制view的小知识点
[onMeasure] 直接继承view或ViewGroup的自定义控件需要重写onMeasure方法并设置wrap_content时的自身大小,否则在布局中使用wrap_content就相当于mat ...
- Android中webView和网页的交互
Android中webView和网页的交互 Android中webView跟网页的交互式通过JavaScript进行的.具体步骤: 1.创建JavaScript,在点击的时候调用JavaScript ...
- 7个高性能JavaScript代码高亮插件
本文由码农网 – 小峰原创,转载请看清文末的转载要求,欢迎参与我们的付费投稿计划! 对于喜欢写技术博客的同学来说,一定对代码高亮组件非常熟悉.一款优秀的JavaScript代码高亮插件,将会帮助你渲染 ...
- Django模板的继承
一.extend 1.extend继承模板 2.一个文件中只能继承一个模板 3.extend继承模板中的所有内容,模板的内容包括:html的head和body ,eg: