网络流最经典的入门题 各种网络算法都能AC。

                              Drainage Ditches

题目抽象:给你m条边u,v,c。   n个定点,源点1,汇点n.求最大流。  最好的入门题,各种算法都可以拿来练习

(1):  一般增广路算法  ford()

  1 #include <iostream>
  2 #include <cstdio>
  3 #include <cstring>
  4 #include <cmath>
  5 #include <algorithm>
  6 #include <string>
  7 #include <vector>
  8 #include <set>
  9 #include <map>
 10 #include <stack>
 11 #include <queue>
 12 #include <sstream>
 13 #include <iomanip>
 14 using namespace std;
 15 typedef long long LL;
 16 const int INF = 0x4fffffff;
 17 const double EXP = 1e-5;
 18 const int MS = 10005;
 19 const int SIZE = 10005;
 20
 21 struct edge
 22 {
 23     int c, f;
 24 }edges[MS][MS];
 25
 26 int n, m;
 27
 28 int flag[MS];
 29 int pre[MS];
 30 int alpha[MS];
 31
 32 int que[SIZE];
 33
 34 int u;
 35 int qs, qe;
 36 int i, j;
 37
 38 void ford()
 39 {
 40     while (1)
 41     {
 42         //  label method
 43         memset(flag, 0xff, sizeof(flag));
 44         memset(pre, 0xff, sizeof(pre));
 45         memset(alpha, 0xff, sizeof(alpha));
 46         flag[1] = 0;
 47         pre[1] = 0;
 48         alpha[1] = INF;
 49         qs = qe = 0;
 50         que[qe++] = 1;
 51
 52         while (qs < qe&&flag[n ] == -1)
 53         {
 54             u = que[qs++];
 55             for (int i = 1; i <= n; i++)
 56             {
 57                 if (flag[i] == -1)
 58                 {
 59                     if (edges[u][i].c >0&&edges[u][i].f < edges[u][i].c)
 60                     {
 61                         flag[i] = 0; pre[i] = u;
 62                         alpha[i] = min(alpha[u], edges[u][i].c - edges[u][i].f);
 63                         que[qe++] = i;
 64                     }
 65                     else if (edges[i][u].c>0&&edges[i][u].f>0)
 66                     {
 67                         flag[i] = 0; pre[i] = -u;
 68                         alpha[i] = min(alpha[u], edges[i][u].f);
 69                         que[qe++] = i;
 70                     }
 71                 }
 72             }
 73             flag[u] = 1;
 74         }    //  END OF WHILE
 75         if (flag[n ] == -1 || alpha[n ] == 0)
 76             break;       //  END OF WHILE
 77
 78         int k1 = n , k2 = abs(pre[k1]);
 79         int a = alpha[n ];
 80         while (1)
 81         {
 82             if (edges[k2][k1].c>0)         //用f是否==INF来判断正向
 83                 edges[k2][k1].f += a;
 84             else
 85                 edges[k1][k2].f -= a;
 86             if (k2 == 1)
 87                 break;
 88             k1 = k2;
 89             k2 = abs(pre[k1]);
 90         }     //  END OF WHILE
 91     }  //  END OF WHILE
 92
 93     int max_flow = 0;
 94     for (int i = 1; i <=n; i++)
 95     {
 96         for (int j = 1; j <=n; j++)
 97         {
 98             if (i == 1 && edges[i][j].f >0)
 99                 max_flow += edges[i][j].f;
100           //  if (edges[i][j].f > 0)
101            //     printf("%d-->%d: %d\n", i, j, edges[i][j].f);
102         }
103     }
104     printf("%d\n", max_flow);
105 }
106
107 int main()
108 {
109     int u, v, c, f;
110     while(scanf("%d%d",&m,&n)!=EOF)
111     {
112           for (int i = 0; i <= n; i++)
113             for (int j = 0; j <= n; j++)
114                  // edges[i][j].c = edges[i][j].f = INF;
115                  edges[i][j].c=edges[i][j].f=0;
116           for (int i = 0; i < m; i++)
117           {
118               //scanf("%d%d%d%d", &u, &v, &c, &f);
119               scanf("%d%d%d",&u,&v,&c);         //   这里是零流
120               edges[u][v].c +=c;                           //  可能有重边
121              // edges[u][v].f = f;
122           }
123           ford();
124     }
125     return 0;
126 }
时间: 2024-10-01 12:54:51

网络流最经典的入门题 各种网络算法都能AC。的相关文章

HDU 1233 还是畅通工程【最小生成树入门题,Kruskal算法+Prim算法】

还是畅通工程 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 39929    Accepted Submission(s): 18144 Problem Description 某省调查乡村交通状况,得到的统计表中列出了任意两村庄间的距离.省政府"畅通工程"的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路

hdu 3549 最大流入门题

题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=3549 [科普]什么是BestCoder?如何参加? Flow Problem Time Limit: 5000/5000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others) Total Submission(s): 8862    Accepted Submission(s): 4168 Problem Description

HDU 2222 Keywords Search AC自动机入门题

单词统计的题目,给出一些单词,统计有多少单词在一个文本中出现,最经典的入门题了. AC自动机的基础: 1 Trie, 以这个数据结构为基础的,不过增加一个fail指针和构造fail的函数 2 KMP,不是直接运用KMP,而是需要KMP的思想,KMP思想都没有的话,理解这个算法会更加吃力的. 注意本题的单词会有重复出现的,一个单词只能统计一次. 搜索了一下网上的题解,发现好多代码都是一大抄的啊,⊙﹏⊙b汗. 本博客的乃是原创代码,代码风格也是差不多固定的,转载请注明出处:http://blog.c

C语言入门100题,考算法的居多

入门题,考算法的居多,共同学习! 1. 编程,统计在所输入的50个实数中有多少个正数.多少个负数.多少个零. 2. 编程,计算并输出方程X2+Y2=1989的所有整数解. 3. 编程,输入一个10进制正整数,然后输出它所对应的八进制.十六进制数. 4. 一个数如恰好等于它的因子之和,这个数就称为“完数”.编程序找出1000以内的所有完数,并输出其因子(6是一个"完数",它的因子是1,2,3). 5. 输入一个正整数,输出它的所有质数因子(如180的质数因子为 2.2.3.3.5). 6

[转] 一些图论、网络流入门题总结、汇总

最短路问题此类问题类型不多,变形较少 POJ 2449 Remmarguts' Date(中等)http://acm.pku.edu.cn/JudgeOnline/problem?id=2449题意:经典问题:K短路解法:dijkstra+A*(rec),方法很多相关:http://acm.pku.edu.cn/JudgeOnline/showcontest?contest_id=1144该题亦放在搜索推荐题中 POJ 3013 - Big Christmas Tree(基础)http://ac

【转】一些图论、网络流入门题总结、汇总

最短路问题 此类问题类型不多,变形较少 POJ 2449 Remmarguts' Date(中等) http://acm.pku.edu.cn/JudgeOnline/problem?id=2449 题意:经典问题:K短路 解法:dijkstra+A*(rec),方法很多 相关:http://acm.pku.edu.cn/JudgeOnline/showcontest?contest_id=1144 该题亦放在搜索推荐题中 POJ 3013 - Big Christmas Tree(基础) ht

[转载] 一些图论、网络流入门题总结、汇总

转载 最短路问题此类问题类型不多,变形较少 POJ 2449 Remmarguts' Date(中等)http://acm.pku.edu.cn/JudgeOnline/problem?id=2449题意:经典问题:K短路解法:dijkstra+A*(rec),方法很多相关:http://acm.pku.edu.cn/JudgeOnline/showcontest?contest_id=1144该题亦放在搜索推荐题中 POJ 3013 - Big Christmas Tree(基础)http:/

(Step1-500题)UVaOJ+算法竞赛入门经典+挑战编程+USACO

下面给出的题目共计560道,去掉重复的也有近500题,作为ACMer Training Step1,用1年到1年半年时间完成.打牢基础,厚积薄发. 一.UVaOJ http://uva.onlinejudge.org 西班牙Valladolid大学的程序在线评测系统,是历史最悠久.最著名的OJ. 二.<算法竞赛入门经典> 刘汝佳  (UVaOJ  351道题)  以下部分内容摘自:http://sdkdacm.5d6d.com/thread-6-1-1.html “AOAPC I”是刘汝佳(大

史上最强----机器学习经典总结---入门必读----心血总结-----回味无穷

让我们从机器学习谈起 导读:在本篇文章中,将对机器学习做个概要的介绍.本文的目的是能让即便完全不了解机器学习的人也能了解机器学习,并且上手相关的实践.当然,本文也面对一般读者,不会对阅读有相关的前提要求. 在进入正题前,我想读者心中可能会有一个疑惑:机器学习有什么重要性,以至于要阅读完这篇非常长的文章呢? 我并不直接回答这个问题前.相反,我想请大家看两张图,下图是图一: 图1 机器学习界的执牛耳者与互联网界的大鳄的联姻 这幅图上上的三人是当今机器学习界的执牛耳者.中间的是Geoffrey Hin