最大流模板
Posted zuotte0
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了最大流模板相关的知识,希望对你有一定的参考价值。
题目:http://hihocoder.com/problemset/problem/1369
题目对最大流介绍的还不错的。
模板题,记个模板:
1 #include "iostream" 2 #include "memory.h" 3 #include "stdlib.h" 4 #include "queue" 5 #include "algorithm" 6 using namespace std; 7 #define inf 0x3fffffff 8 int N, M; 9 int pic[505][505], flow[505], path[505]; 10 queue<int> s; 11 12 int bfs(){ 13 int i, t; 14 memset(path, -1, sizeof(path)); 15 memset(flow, 0, sizeof(flow)); 16 while(!s.empty()) s.pop(); 17 s.push(1); 18 flow[1] = inf; 19 while(!s.empty()){ 20 t = s.front(); 21 s.pop(); 22 for(i = 2; i <= N; i++){ 23 if(pic[t][i]>0 && path[i] == -1){ 24 flow[i] = min(pic[t][i], flow[t]); 25 s.push(i); 26 path[i] = t; 27 if(i == N) return flow[N]; 28 } 29 } 30 } 31 if(!flow[N]) return 0; 32 return flow[N]; 33 } 34 void EK(){ 35 int add, maxflow, now; 36 maxflow = 0; 37 while(add = bfs()){ 38 maxflow += add; 39 now = N; 40 while(now != 1){ 41 pic[path[now]][now] -= add; 42 pic[now][path[now]] += add; 43 now = path[now]; 44 } 45 } 46 cout<<maxflow<<endl; 47 } 48 int main(){ 49 //freopen("test.txt", "r", stdin);/////////// 50 int c, u, v; 51 while(cin>>N>>M){ 52 memset(pic, 0, sizeof(pic)); 53 for(int i = 0 ;i < M; i++){ 54 cin>>u>>v>>c; 55 pic[u][v] += c; 56 } 57 EK(); 58 } 59 return 0; 60 }
以上是关于最大流模板的主要内容,如果未能解决你的问题,请参考以下文章