最大流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
随机推荐
- pycharm实用快捷键集锦
以下是本人需要记录的快捷键,并不针对大众,所以是断断续续补充的,大家看看图个乐呵就成! 生成代码块(Surround with):Ctrl + Alt + t . 历史浏览页面跳转:很多时候,我们需要 ...
- webpack学习笔记——打包后直接访问页面,图片路径错误
我说的这种图片路径错误是这样的,运行webpack-dev-server,一切正常,没有错误.当webpack之后,直接打开index页面,报错,图片找不到,找不到的原因是路径错误. 先看我的项目代码 ...
- 鼠标右键添加Sublime Text
鼠标右键添加Sublime Text 参考 将sublime添加到鼠标右键 实践 1. win+R 输入regedit 2. 输入路径: 计算机\HKEY_CLASSES_ROOT\*\shell\ ...
- lsof/netstat命令的一个重要作用: 根据进程查端口, 根据端口查进程
我们知道, 根据ps -aux | grep xxx就是很快实现进程名和进程号的互查, 所以我们只说进程号pid就行. 如下示例中, 进程pid常驻. 1. 根据进程pid查端口: lsof -i ...
- 用可配置外部工具的编辑器编译与执行java
用可配置外部工具的编辑器编译与执行java 最近用了everedit.觉得比之前平时用的Editplus有更多的细节与功能要好许多. 这里就写写用everedit编译与执行java的方法. 原理 ja ...
- [转] fastText
mark- from : https://www.jiqizhixin.com/articles/2018-06-05-3 fastText的起源 fastText是FAIR(Facebook AIR ...
- WebService - 基础概念
一.WebService到底是什么 一言以蔽之:WebService是一种跨编程语言和跨操作系统平台的远程调用技术. 所谓跨编程语言和跨操作平台,就是说服务端程序采用java编写,客户端程序则可以采用 ...
- Bootstrap3 模态框 select2搜索框无法输入
<div class="modal fade" role="dialog" aria-hidden="true" data-backd ...
- 【原创】大叔问题定位分享(12)Spark保存文本类型文件(text、csv、json等)到hdfs时为什么是压缩格式的
问题重现 rdd.repartition(1).write.csv(outPath) 写文件之后发现文件是压缩过的 write时首先会获取hadoopConf,然后从中获取是否压缩以及压缩格式 org ...
- Gmagick convert SVG to PNG with transparent/opacity background
1 前言 在Ubuntu18.04环境下,用gographics/gmagick API使用了以下代码未有效果 pw := gmagick.NewPixelWand() pw.SetOpacity(1 ...