isap演算法還不懂的戳這裡:
最大流入門題傳送門:poj 1273 drainage ditches
下面是isap + 當前弧優化 + gap優化的**:
#include #include #include #define clear(a, x) memset (a, x, sizeof a)
#define copy(a, b) memcpy (a, b, sizeof a)
using namespace std;
const int maxe = 1000000;
const int maxn = 100000;
const int maxq = 1000000;
const int oo = 0x3f3f3f3f;
struct edge edge[maxe];//邊組
int adj[maxn], cnte;//前向星的表頭
int q[maxq], head, tail;//佇列
int d[maxn], cur[maxn], pre[maxn], num[maxn];
int sourse, sink, nv;//sourse:源點,sink:匯點,nv:編號修改的上限
int n, m;
void addedge (int u, int v, int c)
void rev_bfs ()
} }
int isap()
} for (i = sourse; i != sink; i = edge[cur[i]].v)
flow += f;//更新
u = neck;//回退
} for (i = cur[u]; ~i; i = edge[i].n) if (d[edge[i].v] + 1 == d[u] && edge[i].c) break;
if (~i)
else
} d[u] = mind + 1;
num[d[u]]++;
u = pre[u];//回退
} }
return flow;
}
void init ()
void work ()
int main()
#include #define clr( a , x ) memset ( a , x , sizeof a )
const int maxn = 100005 ;
const int maxe = 1000005 ;
const int inf = 0x3f3f3f3f ;
struct edge
edge ( int v , int c , int n ) : v ( v ) , c ( c ) , n ( n ) {}
} ;edge e[maxe] ;
int h[maxn] , cnte ;
int d[maxn] ;
int cur[maxn] ;
int pre[maxn] ;
int gap[maxn] ;
int s , t , nv , flow ;
int q[maxn] , head , tail ;
void init ()
void addedge ( int u , int v , int c , int r = 0 )
void revbfs () }}
int isap ()
}flow += f ;
for ( i = s ; i != t ; i = e[cur[i]].v )
} for ( i = cur[u] ; ~i ; i = e[i].n )
if ( ~i ) else
}d[u] = minv + 1 ;
gap[d[u]] ++ ;
u = pre[u] ;
} }return flow ;
}
模板 最大流模板(ISAP)
題目描述 如題,給出乙個網路圖,以及其源點和匯點,求出其網路最大流。輸入輸出格式 輸入格式 第一行包含四個正整數n m s t,分別表示點的個數 有向邊的個數 源點序號 匯點序號。接下來m行每行包含三個正整數ui vi wi,表示第i條有向邊從ui出發,到達vi,邊權為wi 即該邊最大流量為wi 輸...
模板 網路最大流ISAP
模板 網路最大流isap 建反邊從t到s,bfs跑記錄每個點所在層,gap記錄每層的點數 include using namespace std typedef long long ll const ll max n 1e6 const ll max m 1e6 const ll max e max...
網路流 最大流 ISAP 模板
至於怎麼找到的呢 我才不會說是當初搜網路流乙個個都不理解然後翻到十幾頁點進去看到的 吶 貌似是 國立台灣師範大學 的 這學校是不是這個名 繁體我不會認啊好尷尬 前言 首先不知道這是 isap 還是 sap.作為乙個剛學網路流的蒟蒻 frocean 感覺這網路流真是個玄學的東西 跟著標打模板 0分 0...