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

#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. Git命令篇

    前文: Git有三种状态,你的文件可能处于其中之一:已提交(committed),已修改(modiffied)和已暂存(staged) 三个工作区域概念:Git仓库.工作目录以及暂存区 Git保存信息 ...

  2. Linux查看日志命令- more、less、tail、head命令的区别

    参考:https://blog.csdn.net/caib1109/article/details/52195942 1.more 2.tail 3.less 4.cat 5.head

  3. python之selectors

    selectors是select模块的包装器,ptython文档建议大部分情况使用selectors而不是直接使用selectors 样例代码如下 # -*- coding: utf-8 -*- __ ...

  4. OGG抽取进程异常问题排查一例

    1.问题现象抽取进程常常running,但是没有新产生trail文件,lag比较大 GGSCI (xxxdb) > info all Program Status Group Lag at Ch ...

  5. 浅谈Java 8的新特性和使用场景

    一.default方法:   通过default方法,可以在接口(Interface interface_name)中添加实例化方法:   代码如下: public interface TestDef ...

  6. [HAOI2007]理想的正方形(随机化,骗分?)

    题目描述 有一个a*b的整数组成的矩阵,现请你从中找出一个n*n的正方形区域,使得该区域所有数中的最大值和最小值的差最小. 输入输出格式 输入格式: 第一行为3个整数,分别表示a,b,n的值 第二行至 ...

  7. leetcode笔记(三)207. Course Schedule

    题目描述(原题目链接) There are a total of n courses you have to take, labeled from 0 to n-1. Some courses may ...

  8. 关于 laravel 集合的使用

    常用的有 count() count方法返回集合中所有项的数目: $collection = collect([1, 2, 3, 4]); $collection->count(); forPa ...

  9. 利用python和opencv批量去掉图片黑边

    import os import cv2 import numpy as np from scipy.stats import mode import time import concurrent.f ...

  10. MAC系统如何显示隐藏文件解决方法

    苹果Mac OS 操作系统下,隐藏文件默认为隐藏状态,隐藏文件是否显示有多种方法可以设置. 方法一: 打开终端,输入命令行 1.显示Mac隐藏文件的命令: defaults write com.app ...