带当前弧优化 gap优化的sap 甚至省去了开始的bfs分层

虽然花了一些时间了解原理 但是感觉不亏 现在能完全独立靠原理写出具体实现了

#include<cstdio>
#include<cstring>
using namespace std;
const int maxn = , maxm = , inf = 0x3f3f3f3f;
int st, ed, tot, n, m;
struct Edge{
int u, v, nxt, w, f;
Edge(){}
Edge(int u, int v, int nxt, int w, int f):u(u), v(v), nxt(nxt), w(w), f(f){}
}edge[maxm];
int head[maxn], cur[maxn], gap[maxn], dep[maxn], pre[maxn];
void init(){
tot = ;
memset(head, -, sizeof head);
}
void addedge(int u, int v, int w){
edge[tot] = Edge(u, v, head[u], w, );
head[u] = tot++;
edge[tot] = Edge(v, u, head[v], , );
head[v] = tot++;
}
int sap(){
memset(gap, , sizeof (gap));
memset(dep, , sizeof (dep));
memcpy(cur, head, sizeof (head));
int u = st;
pre[u] = -;
gap[] = n;
int ans = ;
while(dep[st] < n){
if(u == ed){
int MIN = inf;
for(int i = pre[u]; i != -; i = pre[edge[i].u]){
if(MIN > edge[i].w - edge[i].f)
MIN = edge[i].w - edge[i].f;
}
for(int i = pre[u]; i != -; i = pre[edge[i].u]){
edge[i].f += MIN;
edge[i^].f -= MIN;
}
u = st;
ans += MIN;
continue;
}
bool flag = false;
int v;
for(int i = cur[u]; i != -; i = edge[i].nxt){
v = edge[i].v;
if(edge[i].w - edge[i].f && dep[v]+ == dep[u]){
flag = true;
cur[u] = pre[v] = i;
break;
}
}
if(flag){
u = v;
continue;
}
int MIN = n;
for(int i = head[u]; i != -; i = edge[i].nxt){
if(edge[i].w - edge[i].f && dep[edge[i].v] < MIN){
MIN = dep[edge[i].v];
cur[u] = i;
}
}
gap[dep[u]]--;
if(!gap[dep[u]])
return ans;
dep[u] = MIN+;
gap[dep[u]]++;
if(u != st)
u = edge[pre[u]].u;
}
return ans;
}
int main(){
int t, kase = ;
scanf("%d", &t);
while(t--){
init();
scanf("%d%d", &n, &m);
while(m--){
int u, v, w;
scanf("%d%d%d", &u, &v, &w);
addedge(u, v, w);
}
st = , ed = n;
printf("Case %d: ", kase++);
printf("%d\n", sap());
}
return ;
}

最大流sap的更多相关文章

  1. hdu 4280 最大流sap

    模板套起来 1 5 7 //5个结点,7个边 3 3 //坐标 3 0 3 1 0 0 4 5 1 3 3 //相连的结点和流 2 3 4 2 4 3 1 5 6 4 5 3 1 4 4 3 4 2 ...

  2. poj 2455 Secret Milking Machine 二分+最大流 sap

    题目:p条路,连接n个节点,现在需要从节点1到节点n,不重复走过一条路且走t次,最小化这t次中连接两个节点最长的那条路的值. 分析:二分答案,对于<=二分的值的边建边,跑一次最大流即可. #in ...

  3. M - Escape - HDU 3605 - (缩点+最大流SAP)

    题目大意:2012世界末日来了,科学家发现了一些星球可以转移人口,不过有的人可以在一些星球上生存有的人不行,而且每个星球都有一定的承载量,现在想知道是否所有的人都可以安全转移呢? 输入:首先输入一个N ...

  4. POJ1273 USACO 4.2.1 Drainage Ditches CodeVS1993草地排水 网络流 最大流 SAP

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 传送门 - POJ 传送门 - CodeVS 题意概括 给出一个图,告诉你边和容量,起点是1,汇点是n,让你求最大流. 题解 ...

  5. hdu 4280 最大流 sap模板

    给你岛的坐标求最西边到最东边的最大流 /* 最大流模板 sap */ #include<stdio.h> #include<string.h> #include<algo ...

  6. HDU2732 Leapin' Lizards 网络流 最大流 SAP

    原文链接http://www.cnblogs.com/zhouzhendong/p/8362002.html 题目传送门 - HDU2732 题意概括 给你一个网格,网格上的一些位置上有一只蜥蜴,所有 ...

  7. HDU 4183 Pahom on Water(最大流SAP)

    Pahom on Water Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) T ...

  8. BZOJ1458 士兵占领 网络流 最大流 SAP

    原文链接http://www.cnblogs.com/zhouzhendong/p/8384699.html 题目传送门 - BZOJ1458 题意概括 有一个M * N的棋盘,有的格子是障碍.现在你 ...

  9. BZOJ1066 [SCOI2007]蜥蜴 网络流 最大流 SAP

    由于本题和HDU2732几乎相同,所以读者可以看-> HDU2732题解传送门: http://www.cnblogs.com/zhouzhendong/p/8362002.html

随机推荐

  1. [物理学与PDEs]第1章习题10 自由电磁场在 Lorentz 规范变换下可使标势为零

    在自由电磁场的情况, 证明: 在保持 Lorentz 条件下的规范变换下, 可使标势恒为零. 证明: 取 $\psi$ 满足 $\cfrac{\p \psi}{\p t}=\phi$ 且 $\cfra ...

  2. sqlmap基础入门超详细教程

    前言: 总算进入了自己喜欢的行业. 要时刻记得当初自己说过的话, 不忘初心. Come on! 资料: 感谢超哥分享的干货..  sqlmap干货点击直达 学习环境: 本次学习使用的是kali集成的s ...

  3. 项目实战 redis 缓存

    1 首先在你的项目中,引用以下ServiceStack.Redis相关的四个类库.或者通过Nuget进行安装Redis常用组件ServiceStack.Redis. 下载示例代码. 2. 创建一个Re ...

  4. CemtOS7更改yum网易 阿里云的yum源。

    一,鉴于用国外的Yum源,速度比较慢,所以想到将国外的yum源,改为国内的Yum源,著名的有网易 阿里云源.如何更改呢? 二,更改yum源为网易的. 首先备份/etc/yum.repos.d/Cent ...

  5. 2.9 while循环

    while循环 <1>while循环的格式 while 条件: 条件满足时,做的事情1 条件满足时,做的事情2 条件满足时,做的事情3 ...(省略)... demo i = 0 whil ...

  6. ado.net 之 oracle 数据库

    ado.net 操作oracle 数据库 跟操作mssql 的原来基本一样.只是使用不同的命名空间而已.下面举几个例子: 一. C#读取oracle数据库的表格 ///ado.net 读取table ...

  7. MariaDB:SSL配置

    参考文章:https://blog.csdn.net/johnhill_/article/details/72831932 ,谢谢! 1.安装openssl 下载地址:http://slproweb. ...

  8. 【原创】Linux基础之SSH秘钥登录

    官方:https://www.ssh.com/ssh/ The SSH protocol uses encryption to secure the connection between a clie ...

  9. linux 乌班图 lnmp环境搭建

    1.#安装Apache2,目前163的源是2.2.22版本02.sudo apt-get install apache203. 04.#安装MySQL,目前163的源是5.5.24版本05.apt-g ...

  10. cdh zookeeper 不断拒绝连接

    测试hiveserver2高可用的时候,需要登录zookeeper检查hiveserver2是否在zookeeper中注册 执行 zookeeper-client 不断的拒绝连接 -- ::, [my ...