最大流sap
带当前弧优化 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的更多相关文章
- 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 ...
- poj 2455 Secret Milking Machine 二分+最大流 sap
题目:p条路,连接n个节点,现在需要从节点1到节点n,不重复走过一条路且走t次,最小化这t次中连接两个节点最长的那条路的值. 分析:二分答案,对于<=二分的值的边建边,跑一次最大流即可. #in ...
- M - Escape - HDU 3605 - (缩点+最大流SAP)
题目大意:2012世界末日来了,科学家发现了一些星球可以转移人口,不过有的人可以在一些星球上生存有的人不行,而且每个星球都有一定的承载量,现在想知道是否所有的人都可以安全转移呢? 输入:首先输入一个N ...
- POJ1273 USACO 4.2.1 Drainage Ditches CodeVS1993草地排水 网络流 最大流 SAP
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 传送门 - POJ 传送门 - CodeVS 题意概括 给出一个图,告诉你边和容量,起点是1,汇点是n,让你求最大流. 题解 ...
- hdu 4280 最大流 sap模板
给你岛的坐标求最西边到最东边的最大流 /* 最大流模板 sap */ #include<stdio.h> #include<string.h> #include<algo ...
- HDU2732 Leapin' Lizards 网络流 最大流 SAP
原文链接http://www.cnblogs.com/zhouzhendong/p/8362002.html 题目传送门 - HDU2732 题意概括 给你一个网格,网格上的一些位置上有一只蜥蜴,所有 ...
- HDU 4183 Pahom on Water(最大流SAP)
Pahom on Water Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) T ...
- BZOJ1458 士兵占领 网络流 最大流 SAP
原文链接http://www.cnblogs.com/zhouzhendong/p/8384699.html 题目传送门 - BZOJ1458 题意概括 有一个M * N的棋盘,有的格子是障碍.现在你 ...
- BZOJ1066 [SCOI2007]蜥蜴 网络流 最大流 SAP
由于本题和HDU2732几乎相同,所以读者可以看-> HDU2732题解传送门: http://www.cnblogs.com/zhouzhendong/p/8362002.html
随机推荐
- scheduling while atomic 出现的错误
产生这种情况的原因: 1.当中断发生时,出现了调度做法, 2.另一个是spin_lock 里调用sleep, 让出调度, 另外线程又进行spin_lock, 导致死锁. 相关问题的链接 1.为 ...
- webservice访问的几种方式
今天在对接的客户用到了webservice,最终采用wsimport生成本地代理方式以SDK的形式对接,但是想的完整的总结一下ws的几种调用方式. 发布服务的IP地址是:192.168.125.116 ...
- JavaWeb - Apache与Tomcat有什么关系和区别
总结: 1- apache是web服务器,侧重于http server: tomcat是应用(java)服务器,侧重于servlet引擎 2-合作过程详解,请看:JavaWeb - apache和to ...
- POJ 2031 Building a Space Station (计算几何+最小生成树)
题目: Description You are a member of the space station engineering team, and are assigned a task in t ...
- 3D Slicer中文教程(四)—图像分割
1.数据获取 (1)下载3D Slicer自带的样本数据 (2)选择自由的数据 (3)网上数据库等其他方式下载数据 2.分割工具 Segment Editor是一个用于分割的模块.细分(也称为轮廓)描 ...
- 干货分享:让你分分钟学会 javascript 闭包(转)
闭包,是javascript中独有的一个概念,对于初学者来讲,闭包是一个特别抽象的概念,特别是ECMA规范给的定义,如果没有实战经验,你很难从定义去理解它.因此,本文不会对闭包的概念进行大篇幅描述,直 ...
- C++设计模式——装饰模式
前言 在实际开发时,你有没有碰到过这种问题:开发一个类,封装了一个对象的核心操作,而这些操作就是客户使用该类时都会去调用的操作:而有一些非核心的操作,可能会使用,也可能不会使用:现在该怎么办呢? 将这 ...
- Laravel -- 邮箱功能配置问题
```` 今天碰到了这块的问题,还是记一下 ```` 关于邮箱: 品牌:腾讯qq.网易163 等 种类:个人.企业 邮箱服务器种类 配置教程 https://jingyan.baidu.com/art ...
- 在浏览器中查看.vue文件的源码
- js——图片懒加载
<img class="js-lazy-image centered" src="./img/dog-running.svg" width="4 ...