ISAP 最大流 最小割 模板
虽然这道题用最小割没有做出来,但是这个板子还是很棒:
#include<stdio.h>
#include<math.h>
#include<string.h>
#include<iostream>
#include<algorithm>
#define ll long long
using namespace std;
#define REP( i , a , b ) for ( int i = a ; i < b ; ++ i )
#define REV( i , a , b ) for ( int i = a - 1 ; i >= b ; -- i )
#define FOR( i , a , b ) for ( int i = a ; i <= b ; ++ i )
#define FOV( i , a , b ) for ( int i = a ; i >= b ; -- i )
#define CLR( a , x ) memset ( a , x , sizeof a )
#define CPY( a , x ) memcpy ( a , x , sizeof a )
const int MAXN = ;
const int MAXQ = ;
const int MAXE = ;
const ll INF = ; struct Edge {
int v , n ;
ll c ;
Edge () {}
Edge ( int v , ll c , int n ) : v ( v ) , c ( c ) , n ( n ) {}
} ; struct Net {
Edge E[MAXE];
int H[MAXN] , cntE ;
int d[MAXN] , num[MAXN] , cur[MAXN] , pre[MAXN] ;
int Q[MAXQ] , head , tail ;
int s , t , nv ;
int n , m ;
ll flow ; int deg[MAXN] ; inline void init () {
cntE = ;
CLR ( H , - ) ;
int i;
for(i=; i <= n+ ; i++) H[i] = -;
} inline void addedge ( int u , int v , ll c ) {
E[cntE] = Edge ( v , c , H[u] ) ;
H[u] = cntE ++ ;
E[cntE] = Edge ( u , c , H[v] ) ;
H[v] = cntE ++ ;
} inline void rev_bfs () {
CLR ( d , - ) ;
int i;
for(i=; i <= n+ ; i++) d[i] = -;
CLR ( num , ) ;
head = tail = ;
Q[tail ++] = t ;
d[t] = ;
num[d[t]] = ;
while ( head != tail ) {
int u = Q[head ++] ;
for ( int i = H[u] ; ~i ; i = E[i].n ) {
int v = E[i].v ;
if ( ~d[v] )
continue ;
d[v] = d[u] + ;
num[d[v]] ++ ;
Q[tail ++] = v ;
}
}
} inline ll ISAP () {
CPY ( cur , H ) ;
rev_bfs () ;
flow = ;
int u = pre[s] = s ;
while ( d[s] < nv ) {
if ( u == t ) {
ll f = INF , pos ;
for ( int i = s ; i != t ; i = E[cur[i]].v )
if ( f > E[cur[i]].c ) {
f = E[cur[i]].c ;
pos = i ;
}
for ( int i = s ; i != t ; i = E[cur[i]].v ) {
E[cur[i]].c -= f ;
E[cur[i] ^ ].c += f ;
}
flow += f ;
u = pos ;
}
for ( int &i = cur[u] ; ~i ; i = E[i].n )
if ( E[i].c && d[u] == d[E[i].v] + )
break ;
if ( ~cur[u] ) {
pre[E[cur[u]].v] = u ;
u = E[cur[u]].v ;
} else {
if ( == ( -- num[d[u]] ) )
break ;
int mmin = nv ;
for ( int i = H[u] ; ~i ; i = E[i].n )
if ( E[i].c && mmin > d[E[i].v] ) {
cur[u] = i ;
mmin = d[E[i].v] ;
}
d[u] = mmin + ;
num[d[u]] ++ ;
u = pre[u] ;
}
}
return flow ;
} inline void solve () {
int u , v ;
ll c ;
init () ;
CLR ( deg , ) ;
s = ;
t = n ;
nv = t;
REP ( i , , n ) {
scanf ( "%d%d%lld" , &u , &v , &c ) ;
addedge ( u , v , c ) ;
++ deg[u] ;
++ deg[v] ;
}
printf ( "%lld\n" , ISAP () ) ;
}
} x ; int main () {
// while ( ~scanf ( "%d" , &x.n ) && ( x.n ) ) {
// x.m = x.n - 1;
scanf("%d",&x.n);
x.solve () ;
// } return ;
}
ISAP 最大流 最小割 模板的更多相关文章
- 最大流/最小割模板(isap) POJ1273
isap模板核心代码: //d[]为距离标号数组,d[i]表示节点i到汇点的距离 //gap[]为GAP优化数组,gap[i]表示到汇点距离为i的节点个数 int dfs(int k,int flow ...
- 最大流-最小割 MAXFLOW-MINCUT ISAP
简单的叙述就不必了. 对于一个图,我们要找最大流,对于基于增广路径的算法,首先必须要建立反向边. 反向边的正确性: 我努力查找了许多资料,都没有找到理论上关于反向边正确性的证明. 但事实上,我们不难理 ...
- poj2914无向图的最小割模板
题意:给出无向图的点,边,权值.求最小割. 思路:根据题目规模,最大流算法会超时. 网上参考的模板代码. 代码: /*最小割集◎Stoer-Wagner算法:一个无向连通网络,去掉一个边集可以使其变成 ...
- 最大流&最小割 - 专题练习
[例1][hdu5889] - 算法结合(BFS+Dinic) 题意 \(N\)个点\(M\)条路径,每条路径长度为\(1\),敌人从\(M\)节点点要进攻\(1\)节点,敌人总是选择最优路径即最短路 ...
- UVa11248 Frequency Hopping(最大流+最小割)
题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=33206 [思路] 最大流最小割. 可以确定的是如果不可行需要修改的 ...
- matlab练习程序(最大流/最小割)
学习这个算法是为学习图像处理中的图割算法做准备的. 基本概念: 1.最大流是一个有向图. 2.一个流是最大流,当且仅当它的残余网络中不包括增广路径. 3.最小割就是网络中所有割中值最小的那个割,最小割 ...
- 「网络流24题」「LuoguP2774」方格取数问题(最大流 最小割
Description 在一个有 m*n 个方格的棋盘中,每个方格中有一个正整数.现要从方格中取数,使任意 2 个数所在方格没有公共边,且取出的数的总和最大.试设计一个满足要求的取数算法.对于给定的方 ...
- HDU6582 Path【优先队列优化最短路 + dinic最大流 == 最小割】
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6582 来源:2019 Multi-University Training Contest 1 题目大意 ...
- poj2914 Minimum Cut 全局最小割模板题
Minimum Cut Time Limit: 10000MS Memory Limit: 65536K Total Submissions: 8324 Accepted: 3488 Case ...
随机推荐
- 自己做的HTML
<html> <body background="http://img1.imgtn.bdimg.com/it/u=821335874,2927998559&fm= ...
- 缓存&跨域
一.前端本地缓存的几种实现方式了解一下 缓存的几种实现方式 序号 名称 参考资料 1 serviceWorker https://blog.csdn.net/ztguang/article/deta ...
- 自动化测试selenium教程
什么是自动化测试: 自动帮我们测试一个系统里面的主要功能,一个app.电脑网站.网页,每个系里面许多的功能,好比一个淘宝页面,里面N多功能,登录.注册,推荐,商品详情.评论等等:软件生命周期:需求调研 ...
- Openresty最佳案例 | 第1篇:Nginx介绍
转载请标明出处: http://blog.csdn.net/forezp/article/details/78616591 本文出自方志朋的博客 Nginx 简介 Nginx是一个高性能的Web 服务 ...
- 小白袍 -- Chapter 1 Java中的Encode与Decode
前几天做一个邮件发送功能,一些常用信息配置在properties文件中,通过prop.getProperty(key)来获取配置的信息,结果配置文件中是用中文写的,邮件发送成功后,邮箱中的激活链接是乱 ...
- 数据恢复顾问(DRA)
(1)DRA介绍 数据恢复顾问(Data Recovery Advise)是一个诊断和修复数据库的工具,DRA能够修复数据文件和(某些环境下)控制文件的损坏,它不提供spfile和logfile的修复 ...
- WKWebView进度及title
WKWebView进度及title WKWebView进度及title WKWebView 的estimatedProgress和title 都是KVO模式,所以可以添加监控: [webView ad ...
- c#项目总结
写了将近10年代码了,最后休息,回想了下,感觉什么都没有. 所以打算写一些总结性的文章,先写几个项目,用于c#各个方向的封装使用 最后汇总成一个完善的解决方案.所有项目都在一个解决方案FastAIFr ...
- ansible-palybook剧本
1 ansible基础知识部分补充 1.1 ansible软件特点: · 可以实现批量管理 · 可以实现批量部署 · ad-hoc(批量执行命令)---针对临时性的操作 ansible clsn -m ...
- phpstudy启动时Apache启动不了
打开cmd,输入:D:\phpStudy\PHPTutorial\Apache\bin\httpd.exe -t 回车,即显示错误信息 说是我们的有一个文件目录不存在或者不可读取, 出现这个一般有两种 ...