POJ 1273 Drainage Ditches | 最大流模板

Posted MSPqwq

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了POJ 1273 Drainage Ditches | 最大流模板相关的知识,希望对你有一定的参考价值。

 1 #include<cstdio>
 2 #include<algorithm>
 3 #include<cstring>
 4 #include<queue>
 5 #define N 210
 6 #define INF 1234567897
 7 using namespace std;
 8 int cnt=2,head[N],n,m,ans,lev[N];
 9 queue <int> q;
10 struct edge
11 {
12     int u,v,w;
13 }e[4*N];
14 void add(int u,int v,int w)
15 {
16     e[cnt].w=w;
17     e[cnt].v=v;
18     e[cnt].u=head[u];
19     head[u]=cnt++;
20 }
21 int bfs()
22 {
23     memset(lev,-1,sizeof(lev));
24     lev[1]=0;
25     q.push(1);
26     while (!q.empty())
27     {
28         int x=q.front();
29         for (int i=head[x];i;i=e[i].u)
30         {
31              int v=e[i].v;
32              if (lev[v]==-1 && e[i].w>0)
33                 lev[v]=lev[x]+1,q.push(v);
34         }
35         q.pop();
36     }
37     return lev[m]!=-1;
38 }
39 int dfs(int x,int flw)
40 {
41     if (x==m) return flw;
42     for (int i=head[x];i;i=e[i].u)
43     {
44     int v=e[i].v,tmp;
45         if (lev[v]==lev[x]+1 && e[i].w>0 && (tmp=dfs(v,min(flw,e[i].w)))>0)
46         {
47             e[i].w-=tmp;
48             e[i^1].w+=tmp;
49             return tmp;
50         }
51     }
52     return 0;
53 }
54 void init()
55 {
56     memset(head,0,sizeof(head));
57     cnt=2;
58     ans=0;
59 }
60 int main()
61 {
62     int u,v,w,tmp;
63     while(scanf("%d%d",&n,&m)!=EOF)
64     {
65     init();
66     for (int i=1;i<=n;i++)
67     {
68         scanf("%d%d%d",&u,&v,&w);
69         add(u,v,w);
70         add(v,u,0);
71     }
72     while (bfs())
73         while (tmp=dfs(1,INF)) ans+=tmp;
74     printf("%d\n",ans);
75     }
76     return 0;
77 }

 

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

poj 1273 Drainage Ditches(最大流)

POJ1273 Drainage Ditches

POJ 1273 Drainage Ditches

POJ-1273 Drainage Ditches 最大流

POJ 1273 Drainage Ditches 费用流

POJ 1273 Drainage Ditches (网络最大流)