poj 1273

Posted LMissher

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了poj 1273相关的知识,希望对你有一定的参考价值。

题意:网络流的裸题,1为源点,n为汇点,给定每条边的容量,求最大流,用EK算法。

代码:

#include <cstdio>
#include <queue>
#include <algorithm>
#include <cstring>
#define N 300
#define INF 0x7fffffff
using namespace std;
int Map[N][N];
int path[N];
int n,m;

bool bfs(int s,int t){//寻找最短路径
     int p;
   queue<int> q;
   memset(path,-1,sizeof(path));
   path[s]=s;
   q.push(s);
   while(!q.empty()){
      p=q.front();
      q.pop();
      for(int i=1;i<=m;i++){
         if(Map[p][i]>0&&path[i]==-1){
             path[i]=p;
             if(i==t) return true;
             q.push(i);
          }
       }
   }
   return false;
}
int Ek(int s,int t){
   int d,flow=0;
   while(bfs(s,t)){//直到无法找到最短路径
      d=INF;
      for(int i=t;i!=s;i=path[i]){
         d=min(d,Map[path[i]][i]);
       }
      for(int i=t;i!=s;i=path[i]){
         Map[path[i]][i]-=d;//正向
         Map[i][path[i]]+=d;//反向
       }
       flow+=d;
    }
   return flow;
}
int main(){
      while(scanf("%d%d",&n,&m)!=EOF){
        memset(Map,0,sizeof(Map));
        for(int i=1;i<=n;i++){
      int from,to,flow;
      scanf("%d%d%d",&from,&to,&flow);
      Map[from][to]+=flow;
    }
    printf("%d\n",Ek(1,m));
  }
 return 0;
}

以上是关于poj 1273的主要内容,如果未能解决你的问题,请参考以下文章

poj 1273 Drainage Ditches(最大流)

POJ1273 最大流模板

POJ 1273 Drainage Ditches (网络最大流)

poj 1273 Drainage Ditches (最大流入门)

poj1273---Drainage Ditches

POJ1273(最大流)