虽然这道题用最小割没有做出来,但是这个板子还是很棒:

#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 最大流 最小割 模板的更多相关文章

  1. 最大流/最小割模板(isap) POJ1273

    isap模板核心代码: //d[]为距离标号数组,d[i]表示节点i到汇点的距离 //gap[]为GAP优化数组,gap[i]表示到汇点距离为i的节点个数 int dfs(int k,int flow ...

  2. 最大流-最小割 MAXFLOW-MINCUT ISAP

    简单的叙述就不必了. 对于一个图,我们要找最大流,对于基于增广路径的算法,首先必须要建立反向边. 反向边的正确性: 我努力查找了许多资料,都没有找到理论上关于反向边正确性的证明. 但事实上,我们不难理 ...

  3. poj2914无向图的最小割模板

    题意:给出无向图的点,边,权值.求最小割. 思路:根据题目规模,最大流算法会超时. 网上参考的模板代码. 代码: /*最小割集◎Stoer-Wagner算法:一个无向连通网络,去掉一个边集可以使其变成 ...

  4. 最大流&最小割 - 专题练习

    [例1][hdu5889] - 算法结合(BFS+Dinic) 题意 \(N\)个点\(M\)条路径,每条路径长度为\(1\),敌人从\(M\)节点点要进攻\(1\)节点,敌人总是选择最优路径即最短路 ...

  5. UVa11248 Frequency Hopping(最大流+最小割)

    题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=33206 [思路] 最大流最小割. 可以确定的是如果不可行需要修改的 ...

  6. matlab练习程序(最大流/最小割)

    学习这个算法是为学习图像处理中的图割算法做准备的. 基本概念: 1.最大流是一个有向图. 2.一个流是最大流,当且仅当它的残余网络中不包括增广路径. 3.最小割就是网络中所有割中值最小的那个割,最小割 ...

  7. 「网络流24题」「LuoguP2774」方格取数问题(最大流 最小割

    Description 在一个有 m*n 个方格的棋盘中,每个方格中有一个正整数.现要从方格中取数,使任意 2 个数所在方格没有公共边,且取出的数的总和最大.试设计一个满足要求的取数算法.对于给定的方 ...

  8. HDU6582 Path【优先队列优化最短路 + dinic最大流 == 最小割】

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6582 来源:2019 Multi-University Training Contest 1 题目大意 ...

  9. poj2914 Minimum Cut 全局最小割模板题

    Minimum Cut Time Limit: 10000MS   Memory Limit: 65536K Total Submissions: 8324   Accepted: 3488 Case ...

随机推荐

  1. 64 位系统(win7/win8) 下使用C# 程序问题

    1  C# 程序是控制台类,使用的组件如果是32位,建议在编译的时候,platform (X86,AnyCPU,X64)选择X86 .使用X86 模式编译,才能调用32位程序的API. 2  ASP. ...

  2. static函数

    C语言中使用静态函数的好处:      静态函数会被自动分配在一个一直使用的存储区,直到退出应用程序实例,避免了调用函数时压栈出栈,速度快很多.       关键字“static”,译成中文就是“静态 ...

  3. Vue nodejs商城项目-商品列表价格过滤和加入购物车功能

    一.价格过滤功能 GoodsList.vue >>点击价格区间时发送请求 methods:{     getGoodsList(flag){         var param = {   ...

  4. nginx 方向代理

    #nginx 监听原理 先监听端口 --> 再配置域名 -->匹配到就访问local 否则 没有匹配到域名就默认访问第一个监听端口的local地址 # vi nginx.conf user ...

  5. Python基础—10-常用模块:time,calendar,datetime

    #常用模块 time sleep:休眠指定的秒数(可以是小数) time:获取时间戳(从1970-01-01 00:00:00到此刻的秒数) localtime:将一个时间戳转换为一个对象,对象中包含 ...

  6. ABAP术语-Object Name

    Object Name 原文:http://www.cnblogs.com/qiangsheng/archive/2008/03/05/1091092.html An object name is a ...

  7. Win10 VirtualBox虚拟机搭建lnmp环境

    之前用的是vagrant+VirtualBox搭建的环境,因为是windows系统动不动就报错,打不开环境,所以还是老老实实换了虚拟机哎.... 版本: VirtualBox 5.1.34   xsh ...

  8. Git详解及github的使用

    1.Devops介绍 1.Devops是什么 开发 development 运维 operations 2.Devops能干嘛 提高产品质量 1 自动化测试 2 持续集成 3 代码质量管理工具 4 程 ...

  9. flask的模板

    flask用的是jinja2的模板 模板其实是一个包含响应文本的文件,其中用占位符(变量)表示动态部分,告诉模板引擎其具体的值需要从使用的数据中获取 使用真实值替换变量,再返回最终得到的字符串,这个过 ...

  10. python更新mysql数据

    >>>cur.execute("update users set username=%s where id=2",("mypython")) ...