最大流模板

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 } 

 

以上是关于最大流模板的主要内容,如果未能解决你的问题,请参考以下文章

模板最小费用最大流

模板网络最大流

P3376 模板网络最大流——————Q - Marriage Match IV(最短路&最大流)

模板网络最大流

[洛谷P3376]模板网络最大流

网络流最大流入门(Dinic算法)模板