码迷,mamicode.com
首页 > 其他好文 > 详细

最大流hdu1532

时间:2015-05-02 16:27:06      阅读:124      评论:0      收藏:0      [点我收藏+]

标签:

看了几天的网络流 没怎么看懂 看看停停 先把最大流搞了一下

最大流就是从出发点到终点的最大流量。

先要搞清楚残量网络,也就是做完这些后还能走多少。

还有就是增广路(个人理解:走完这条路后,剩余的还能怎么走,走多少,并相加);

hdu1532这题比较简单 也差不多是EK算法的模版

 1 /*hdu1532*/
 2 #include<stdio.h>
 3 #include<string.h>
 4 #include<queue>
 5 #define maxint 99999999
 6 using namespace std;
 7 queue<int>q;
 8 int n,m;
 9 int c[1003][1003],f[1003][1005]; //c流量 f为流了多少
10 int a[1000],pre[1000]; //pre记录其父亲
11 int min(int x,int y)
12 {
13     return x<y?x:y;
14 }
15 int EK(int s,int t)
16 {
17     int i,j;
18     int v;
19     int res=0;
20     memset(f,0,sizeof(f));
21     while(1)
22     {
23         memset(a,0,sizeof(a));
24         a[s]=maxint;
25         q.push(s);
26         while(!q.empty())
27         {
28             int u=q.front();
29             q.pop();
30             for(v=1;v<=m;v++)
31             {
32                 
33                 if(!a[v]&&c[u][v]>f[u][v])
34                 {
35                     pre[v]=u;
36                     q.push(v);
37                     a[v]=min(a[u],c[u][v]-f[u][v]);
38                 }
39             }
40         }
41         if(a[t]==0)
42             break;
43         res+=a[t];
44         for(v=t;v!=s;v=pre[v])
45         {
46             f[pre[v]][v]+=a[t];
47             f[v][pre[v]]-=a[t];
48         }
49     }
50     return res;
51 }
52 int main()
53 {
54     int i,j;
55     while(scanf("%d%d",&n,&m)!=EOF)
56     {
57         memset(c,0,sizeof(c));
58         for(i=0;i<n;i++)
59         {
60             int x,y,z;
61             scanf("%d%d%d",&x,&y,&z);
62             c[x][y]+=z;
63         }
64         int ans=EK(1,m);
65         printf("%d\n",ans);
66     }
67 }

 

最大流hdu1532

标签:

原文地址:http://www.cnblogs.com/sweat123/p/4472003.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!