POJ1459解题报告

本文介绍了如何运用EK算法解决POJ1459题目,该题目要求求解最大的消耗量。通过构建网络图并应用最大流算法模板,最后给出EK算法的C++实现代码,并提及最大流的其他高效实现如SAP、DINIC等,强调理解最大流的基础理论的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

已经好几天没写解题报告了,今天年初一,呵呵,写一个,为今年开个好头。下面步入正题:

POJ1459这道题目的要求是求最大的消耗量。我们添加一个源点s和一个汇点t,与s相连的是所有的np(生产点),边权值为其自己能产生的数值;与t相连的是所有的nc(消耗点),边权值为其消耗最大值。至此便完成了网络的构图。然后直接套用最大流的算法模版即可解决。我使用的是EK算法。

什么是EK算法?EK算法的原理是利用BFS或者DFS每次找到网络中的一条增广路径,然后修改其流量值,直至无法找到增广路径为止。

下面给出EK的源代码:

#include <iostream>
#include <memory.h>
#include <stdio.h>
#define max 65535
using namespace std;
int s,t,n,np,nc,m,tot;
int pre[102],d[102],fx[102],f[102][102],c[102][102];
char str[50];
bool visit[102];
void init()
{
  int i,x,y,z;
  memset(f,0,sizeof(f));//f数组表示网络边的流量
  memset(c,0,sizeof(c));//c数组表示网络边的容量
  s=n;
  t=n+1;
  n+=2;
  for(i=1;i<=m;i++)
  {
    scanf("%s",&str);
    sscanf(str,"(%d,%d)%d",&x,&y,&z);
    c[x][y]=z;                
  }    
  for(i=1;i<=np;i++)
  {
    scanf("%s",&str);
    sscanf(str,"(%d)%d",&x,&z);
    c[s][x]=z;              

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值