UVA 820 --- POJ 1273 最大流

找了好久这两个的区别。。。UVA820 WA了 好多次。不过以后就做模板了,可以求任意两点之间的最大流。

UVA 是无向图,因此可能有重边,POJ 1273是有向图,而且是单源点求最大流,因此改模板的时候注意一下。

而且我居然犯了更愚蠢的错误,以为重边的时候需要选最大的,正解应该是累加。。。。

 1 #include<stdio.h>
 2 #include<queue>
 3 #include<string.h>
 4 #define INF 999999
 5 using namespace std;
 6 int s,t,n,m;
 7 int map[407][407],flow[407][407];
 8 int p[407],a[407];
 9 int EK(int s,int t)
10 {
11     queue<int>q;
12     int sum=0;
13     memset(flow,0,sizeof(flow));
14     while(1)
15     {
16         memset(a,0,sizeof(a));
17         a[s]=INF;
18         q.push(s);
19         while(!q.empty())
20         {
21             int u=q.front();
22             q.pop();
23             for(int i=1; i<=m; i++)
24             {
25                 if(!a[i]&&flow[u][i]<map[u][i])
26                 {
27                     p[i]=u;
28                     q.push(i);
29                     a[i]=a[u]<map[u][i]-flow[u][i]?a[u]:map[u][i]-flow[u][i];
30                 }
31             }
32         }
33         if(!a[t])break;
34         for(int i=t; i!=s; i=p[i])
35         {
36             flow[p[i]][i]+=a[t];
37             flow[i][p[i]]-=a[t];
38         }
39         sum+=a[t];
40     }
41     return sum;
42 }
43 int main()
44 {
45     int cas=1;
46     while(scanf("%d",&m),m)
47     {
48         scanf("%d%d%d",&s,&t,&n);
49         memset(map,0,sizeof(map));
50         int a,b,c;
51         for(int i=0; i<n; i++)
52         {
53             scanf("%d%d%d",&a,&b,&c);
54             map[a][b]+=c;
55             map[b][a]=map[a][b];
56         }
57         int maxx=EK(s,t);
58         printf("Network %d\n",cas++);
59         printf("The bandwidth is %d.\n\n",maxx);
60     }
61     return 0;
62 }

UVA 820 直接EK模板上

可与POJ 1273 的有向图比较一下

注释掉了一个加边

POJ 1273 样例来一发

2 2

1 2 3

1 2 5             答案是8

2 2

1 2 3

2 1 5             答案是3

时间: 2024-11-08 11:51:54

UVA 820 --- POJ 1273 最大流的相关文章

POJ 1273 最大流 Dinic

Drainage Ditches Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 56802 Accepted: 21824 Description Every time it rains on Farmer John's fields, a pond forms over Bessie's favorite clover patch. This means that the clover is covered by wate

[转载 ]POJ 1273 最大流模板

转载 百度文库花了5分下的 不过确实是自己需要的东西经典的最大流题POJ1273 ——其他练习题 POJ3436 . 题意描述: 现在有m个池塘(从1到m开始编号,1为源点,m为汇点),及n条水渠,给出这n条水渠所连接的池塘和所能流过的水量,求水渠中所能流过的水的最大容量.一道基础的最大流题目.但是模板小心使用,目前只是求单源点的最大流. 参考数据: 输入: 5 4 1 2 40 1 4 20 2 4 20 2 3 30 3 4 10 输出: 50 程序实现: 增广路算法Edmonds_Karp

POJ 1273 Drainage Ditches(网络流 最大流)

Drainage Ditches Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 55893   Accepted: 21449 Description Every time it rains on Farmer John's fields, a pond forms over Bessie's favorite clover patch. This means that the clover is covered by

POJ 1273 Drainage Ditches (网络最大流)

http://poj.org/problem?id=1273 Drainage Ditches Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 55235   Accepted: 21104 Description Every time it rains on Farmer John's fields, a pond forms over Bessie's favorite clover patch. This means

poj 1273 Drainage Ditches (最大流入门)

1 /****************************************************************** 2 题目: Drainage Ditches(POJ 1273) 3 链接: http://poj.org/problem?id=1273 4 题意: 现在有m个池塘(从1到m开始编号,1为源点,m为汇点),及n条 5 水渠,给出这n条水渠所连接的池塘和所能流过的水量,求水 6 渠中所能流过的水的最大容量.水流是单向的. 7 算法: 最大流之增广路(入门)

POJ 1273 Drainage Ditches 最大流

很裸的最大流问题,不过注意会有重边,o(╯□╰)o,被阴了WA了一发 还有就是要用long long #include <cstdio> #include <cstring> #include <cmath> #include <algorithm> #include <climits> #include <string> #include <iostream> #include <map> #include

hdu 1532 poj 1273 Drainage Ditches (最大流)

Drainage Ditches Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 55276   Accepted: 21122 Description Every time it rains on Farmer John's fields, a pond forms over Bessie's favorite clover patch. This means that the clover is covered by

POJ 1273 Drainage Ditches(网络流dinic算法模板)

POJ 1273给出M条边,N个点,求源点1到汇点N的最大流量. 本文主要就是附上dinic的模板,供以后参考. #include <iostream> #include <stdio.h> #include <algorithm> #include <queue> #include <string.h> /* POJ 1273 dinic算法模板 边是有向的,而且存在重边,且这里重边不是取MAX,而是累加和 */ using namespace

POJ 1273 Drainage Ditches(初识网络流)

开始研究网络流了,看了两个晚上吧,今天总算动手实践一下,有了更深的理解 总结一下:在最大流中,容量与实际流量满足3点: 1.实际流量<=容量 2.任意两点之间   : 流量(a->b)==流量(b->a) 3.流量守恒原则   :从s流出的流量 == t流入的流量 一.为什么叫增广路,因为在所有的流量网络中,会存在一个残量,所以在整个残量网络中,找到一个最小值,加到所有的流量线路里,便叫增广. 二.为什么要修改反向流量,因为在更新流量网时,当前选择的并不一定就是最优解,比如u->v