[板子]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写成,为获得更好的阅读 ...
随机推荐
- Linux Cmd Tool 系列之—alias
The alias cmd list your current aliases. For example : alias Use alias to shorten a long cmd in curr ...
- MySQL动态游标
通过(准备语句+视图+静态游标)实现 -- 建立测试表和数据 create table webuser (username varchar(10)); insert into webuser valu ...
- CSS3学习总结——实现瀑布流布局与无限加载图片相册
首先给大家看一下瀑布流布局与无限加载图片相册效果图: 一.pic1.html页面代码如下: <!DOCTYPE html> <html> <head> <me ...
- js原生跨域--用script标签实现
刚刚从培训班学习完,总想写一下东西,自从进入了这个院子,每次出现问题,总是能找到一些答案,给我一些帮助. 作为新手,就写一下简单的吧,院子里面有很多大牛, 说句实话,他们的很多代码我都看不懂. 我就写 ...
- JavaScript学习笔记1之基础知识点
一.什么是JavaScrip JavaScript是一种动态类型.弱类型.基于原型的客户端脚本语言.它的解释器被称为JavaScript引擎,为浏览器的一部分,广泛用于客户端的脚本语言,在HTML网页 ...
- Mybatis环境
第一步:下载jar包并导入 1.mysql驱动包 2.mybatis环境包 第二步:创建MYSQL数据库 由于这是用于测试,只创建了test-usreinfo数据表 第三步:在src文件夹中创建myb ...
- iOS加密方式及解压缩文件
Base64加密方式 Base64是一种加密方法,可逆的加密. Base64中的可打印字符包括字母A-Z.a-z.数字0-9,这样共有62个字符./ + 填充 = echo -n BC|base64 ...
- 使用mvn archetype:generate生产maven工程,响应很慢
经常到下列时就不往下走了. 解决方案: 1.不使用interactive mode方式,直接指定DarchetypeArtifactId 2.仍使用interactive mode方式,但增加参数 - ...
- linux shell程序
shell程序介绍 1.查看我们的Linux(centos6.5为例)有多少我们可以使用的shell: [root@localhost bin]# cat /etc/shells /bin/sh /b ...
- Javascript不同浏览器差异及兼容方法
原文链接:http://caibaojian.com/js-ie-different-from-firefox.html javascript的各种兼容就是为了解决不同浏览器的差异性,了解其中的差异能 ...