poj1273解题报告(最大流 EK算法)

原创 2015年07月08日 14:40:02

题目大意:现在有m个池塘(1m开始编号,1为源点,m为汇点),n条水渠,给出这n条水渠所连接的池塘和所能流过的水量,求水渠中所能流过的水的最大容量.

解题思路:最大流的经典题目,套模板即可完成,直接用的LRJ的模板

#include<iostream>
#include<queue>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
const int N=201;
const int INF=99999999;
int n,m,sum,s,t;//s,t为始点和终点
int flow[N][N],cap[N][N],a[N],p[N];
//分别为:flow[u][v]为<u,v>流量、cap[u][v]为<u,v>容量、a[i]表示源点s到节点i的路径上的最小残留量、p[i]记录i的前驱
void Edmonds_Karp()
{
int i,u,v;
queue<int>q;//队列,用bfs找增广路
while(1)
{
   memset(a,0,sizeof(a));//每找一次,初始化一次
   a[s]=INF;
   q.push(s);//源点入队
   while(!q.empty())
   {
    u=q.front();
    q.pop();
    for(v=1;v<=m;v++)
    {
     if(!a[v]&&flow[u][v]<cap[u][v])
     {
      p[v]=u;
      q.push(v);
      a[v]=min(a[u],cap[u][v]-flow[u][v]);//s-v路径上的最小残量
     }
    }
   }
   if(a[m]==0)//找不到增广路,则当前流已经是最大流
    break;
   sum+=a[m];//流加上
   for(i=m;i!=s;i=p[i])// //从汇点顺着这条增广路往回走
   {
    flow[p[i]][i]+=a[m];//更新正向流量
    flow[i][p[i]]-=a[m];//更新反向流量
   }
}
printf("%d\n",sum);
}
int main()
{
//freopen("in.txt","r",stdin);
int v,u,w;
    while(scanf("%d%d",&n,&m)!=EOF)//n是边数,m是点数
{
   s=1;//从1开始
   t=m;//m为汇点
   sum=0;//记录最大流量
   memset(flow,0,sizeof(flow));//初始化
   memset(cap,0,sizeof(cap));
   while(n--)
   {
    scanf("%d%d%d",&u,&v,&w);
    cap[u][v]+=w;//注意图中可能出现相同的边
   }
   Edmonds_Karp();
}
return 0;
}


版权声明:本文为博主原创文章,未经博主允许不得转载。

网络流--最大流(ek算法详解)

首先要先清楚最大流的含义,就是说从源点到经过的所有路径的最终到达汇点的所有流量和 EK算法的核心 反复寻找源点s到汇点t之间的增广路径,若有,找出增广路径上每一段[容量-流量]的最小值de...
  • desire_ing
  • desire_ing
  • 2014年08月01日 11:09
  • 2620

EK算法(网络流,最大流)

EK算法的思路非常的简单,就是一直找增广路径(BFS),假如有,记录增广路的最小值k,ans +=k ,并更新网络的值(要用反向边)。 这么一个图,求源点1,到汇点4的最大流 先附上代码: ...
  • ouqingliang
  • ouqingliang
  • 2016年08月10日 14:15
  • 2102

【图论】最大流之EK算法与Dinic算法及最小费用最大流

最大流: 给出一张网络图,并指定源点和终点,每条边都有它的容量,起点有着无限的流量,求从源点到经过的所有路径的最终到达汇点的最大流量和。对于同一个节点,流入的流量之和和流出的流量之和相同,即假如结点1...
  • Hemk340200600
  • Hemk340200600
  • 2017年03月20日 19:59
  • 915

最大流--EK_bfs算法

先弄清楚几个概念: 图中有一个源点和一个汇点,最大流要求的就是从源点最多可以有多少流量流入汇点。 每条边包括起点,重点,以及容量cap(一共可以通过的流量),流量flow(当前的流量),残量(cap...
  • qq_24664053
  • qq_24664053
  • 2015年11月27日 15:47
  • 422

网络流之最大流(FF, EK, Dinic, SAP)

对于Gap优化成立的解释: 假如某次修改d[u]后第一次出现断层k,显然d[u]之前是等于k的,而d[u]修改的原因是修改前d[u] < d[v]+1,所以d[v] > k-1,而因为出现断层k,d[...
  • yo_bc
  • yo_bc
  • 2017年05月31日 23:50
  • 666

最大流算法之EK(最短路径增广算法)

这是网络流最基础的部分——求出源点到汇点的最大流(Max-Flow)。 最大流的算法有比较多,本次介绍的是其中复杂度较高,但是比较好写的EK算法。(不涉及分层,纯粹靠BFS找汇点及回溯找最小流量得到...
  • kongse_qi
  • kongse_qi
  • 2017年04月07日 02:32
  • 933

hdu1532 最大流 EK算法

一开始怎么也看不懂网络流,完全不明白那算法是怎么样的,直接导致我许多天没写代码了。。。今天终于上手了,\欢呼\撒花\。。。 准确来说,今天有了一点思路(虽然最后还是照着别人的代码敲了一遍,囧。。。)...
  • u010262426
  • u010262426
  • 2013年10月10日 16:10
  • 619

最大流的基本算法(ff算法&&dinic算法&&push-rebeal算法)poj1273

最大流的基本概念有以下几点:               1.残存网络:即为一条管道被占用了一部分流量之后所剩下的流量。在网络流中,图被看为一个有向图,残存流量向量相加后永远不变。这一点有点像基尔霍夫...
  • aaron_1996
  • aaron_1996
  • 2015年08月08日 09:18
  • 1106

HDU_1532 && HDU_3549(最大流EK算法模板)

题意:从1开始到终点n,最多能通过多少的流量,就比如说1到2的流量是20,2到3的流量是10,那么到达终点3的流量为10,而1到2还能经过10的流量,2到3不能再通过。 分析:完全是照刘汝佳的紫书模板...
  • jhgkjhg_ugtdk77
  • jhgkjhg_ugtdk77
  • 2015年09月08日 21:06
  • 670

poj 1273 最大流之最短路径增广法(EK)

Drainage Ditches Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 71182   Accepted...
  • Summer__show_
  • Summer__show_
  • 2016年10月25日 22:17
  • 452
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:poj1273解题报告(最大流 EK算法)
举报原因:
原因补充:

(最多只允许输入30个字)