isap算法模板poj 1273gap+弧优化 最大流
- 几个比较好的博客
- http://www.renfei.org/blog/isap.html
- http://kenby.iteye.com/blog/945454
- http://blog.csdn.net/mypsq/article/details/37959249
- #include<stdio.h>
- #include<string.h>
- #include<queue>
- using namespace std;
- #define inf 999999
- #define N 300
- struct node {
- int u,v,w,next;
- }bian[N*N*2];
- int head[N],yong,stac[N],top,start,n,cur[N],dis[N],gap[N];
- void init() {
- memset(head,-1,sizeof(head));
- memset(dis,-1,sizeof(dis));
- memset(gap,0,sizeof(gap));
- memset(cur,0,sizeof(cur));
- top=0;start=1;yong=0;
- }
- void addedge(int u,int v,int w) {/*建边*/
- bian[yong].u=u;
- bian[yong].v=v;
- bian[yong].w=w;
- bian[yong].next=head[u];
- head[u]=yong++;
- }
- void bfs() {
- queue<int>q;
- q.push(n);
- dis[n]=0;
- int i;
- /*建立层次图*/
- while(!q.empty()) {
- int c=q.front();
- q.pop();
- for(i=head[c];i!=-1;i=bian[i].next) {
- int v=bian[i].v;
- if(dis[v]==-1) {//这里注意不能加这个条件(bian[i^1].w)
- dis[v]=dis[c]+1;
- q.push(v);
- }
- }
- }
- }
- int ISAP() {
- int k,i,sum=0;
- bfs();
- for(i=1;i<=n;i++)//cur数组记录当前位置的边的坐标
- cur[i]=head[i];
- for(i=1;i<=n;i++)
- gap[dis[i]]++;//gap优化记录到汇点距离为dis[i]的个数
- k=start;
- while(dis[start]<n) {
- if(k==n) {//如果满足条件
- int mi=inf,index;
- for(i=0;i<top;i++)
- if(mi>bian[stac[i]].w) {//找最小流
- mi=bian[stac[i]].w;
- index=i;
- }
- for(i=0;i<top;i++) {//修改残留网络
- bian[stac[i]].w-=mi;
- bian[stac[i]^1].w+=mi;
- }
- sum+=mi;
- top=index;//定位到最小的边的权值的位置
- k=bian[stac[top]].u;//当前的k
- }
- for(i=cur[k];i!=-1;i=bian[i].next) {//遍历未走过的边
- int v=bian[i].v;
- if(bian[i].w&&dis[k]==dis[v]+1) {//
- cur[k]=i;
- k=v;
- stac[top++]=i;
- break;
- }
- }
- if(i==-1) {/*更新*/
- int m=n;
- for(i=head[k];i!=-1;i=bian[i].next)
- if(bian[i].w&&m>dis[bian[i].v]){
- m=dis[bian[i].v];
- cur[k]=i;//记录当前的边的下标
- }
- if(--gap[dis[k]]==0)break;//出现断层
- dis[k]=m+1;gap[dis[k]]++;
- if(k!=start)//如果非源点的话
- k=bian[stac[--top]].u;//退点,推到上一个点,将当前边删掉,因为是<top
- }
- }
- return sum;
- }
- int main() {
- int m,i,j,k;
- while(scanf("%d%d",&m,&n)!=EOF) {
- init();
- while(m--) {
- scanf("%d%d%d",&i,&j,&k);
- addedge(i,j,k);
- addedge(j,i,0);
- }
- printf("%d\n",ISAP());
- }
- return 0;
- }
isap算法模板poj 1273gap+弧优化 最大流的更多相关文章
- poj 3469 最小割模板sap+gap+弧优化
/*以核心1为源点,以核心2为汇点建图,跑一遍最大流*/ #include<stdio.h> #include<string.h> #include<queue> ...
- 网络流小记(EK&dinic&当前弧优化&费用流)
欢 迎 来 到 网 络 瘤 的 世 界 什么是网络流? 现在我们有一座水库,周围有n个村庄,每个村庄都需要水,所以会修水管(每个水管都有一定的容量,流过的水量不能超过容量).最终水一定会流向唯一一个废 ...
- ARC085E(最小割规划【最大流】,Dinic当前弧优化)
#include<bits/stdc++.h>using namespace std;typedef long long ll;const ll inf=0x3f3f3f3f;int cn ...
- P3376 【模板】网络最大流( Edmonds-krap、Dinic、ISAP 算法)
P3376 [模板]网络最大流( Edmonds-krap.Dinic.ISAP 算法) 题目描述 如题,给出一个网络图,以及其源点和汇点,求出其网络最大流. 输入格式 第一行包含四个正整数N.M.S ...
- POJ 1273 Drainage Ditches(网络流dinic算法模板)
POJ 1273给出M条边,N个点,求源点1到汇点N的最大流量. 本文主要就是附上dinic的模板,供以后参考. #include <iostream> #include <stdi ...
- 最大流当前弧优化Dinic模板
最大流模板: 普通最大流 无向图限制:将无向图的边拆成2条方向相反的边 无源汇点有最小流限制的最大流:理解为水管流量形成循环,每根水管有流量限制,并且流入量等于流出量 有源汇点的最小流限制的最大流 顶 ...
- 最大流当前弧优化Dinic分层模板
最大流模板: 普通最大流 无向图限制:将无向图的边拆成2条方向相反的有向边 顶点有流量限制:拆成2个点,连接一条容量为点容量限制的边 无源汇点有最小流限制的最大流:理解为水管流量形成循环 有源汇点的最 ...
- POJ 1815 - Friendship - [拆点最大流求最小点割集][暴力枚举求升序割点] - [Dinic算法模板 - 邻接矩阵型]
妖怪题目,做到现在:2017/8/19 - 1:41…… 不过想想还是值得的,至少邻接矩阵型的Dinic算法模板get√ 题目链接:http://poj.org/problem?id=1815 Tim ...
- 【最大流之Dinic算法】POJ1273 【 & 当前弧优化 & 】
总评一句:Dinic算法的基本思想比较好理解,就是它的当前弧优化的思想,网上的资料也不多,所以对于当前弧的优化,我还是费了很大的功夫的,现在也一知半解,索性就写一篇博客,来发现自己哪里的算法思想还没理 ...
随机推荐
- RK摄像头移植【转】
本文转载自:http://wiki.t-firefly.com/index.php/Firefly-RK3288/Camera 板载资源 Firefly-RK3288 开发板带有一个 MIPI 摄像头 ...
- RTP协议分析和详解
一.RTP协议分析 第1章. RTP概述 1.1. RTP是什么 RTP全名是Real-time Transport Protocol(实时传输协议).它是IETF提出的一个标准,对应的RF ...
- (Go)10.流程控制示例
package main import ( "math/rand" "fmt" ) func main() { //var n int n := rand.In ...
- 0420-mysql命令(数据库操作层级,建表,对表的操作)
注意事项: 符号必须为英文. 数据库操作层级: 建表大全: #新建表zuoye1:drop table if exists zuoye1;create table zuoye1( id int ...
- 工作2-5年,身为iOS开发的我应该怎么选择进修方向?
前言: 跳槽,面试,进阶,加薪:这些字眼,相信每位程序员都不陌生! 但是方向的选择,却不知如何抉择!其实最好的方向,已经在各个企业面试需求中完美的体现出来了: 本文展示了2份面试需求,以及方向的总结, ...
- 基于移动Web的视图引擎实现
第一步:移动视图引擎实现 using System.Web.Mvc; /// <summary> /// 移动版View引擎 /// </summary> public cla ...
- 可变长度参数列表(Stering...aaa)
- sql--Truncate Table
Truncate Table(截断表) 有时候需要清除一个表中的所有资料.要达到者个目的,一种方式是DROP TABLE 指令.不过这样整个表格就消失,而无法再被用了. 另一种方式是Delete不带w ...
- AFN上传多张图片
AFN上传多张图片代码: AFHTTPSessionManager *sessionManager = [AFHTTPSessionManager manager]; sessionManager.r ...
- Android引导页
源码地址:https://github.com/myloften/IntroSliderSample 博客地址:http://blog.csdn.net/loften_93663469/article ...