zoukankan      html  css  js  c++  java
  • poj1273最大流

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

    求从源点到汇点能流过的最大流量。

    #include<iostream>
    #include<queue>
    #define Max 201
    using namespace std;
    int cap[Max][Max];//记录原图边i到j的最大流量
    int min(int a,int b)
    {
     return a<b? a:b;
    }
    int maxflow(int s,int t)//s是源点t是汇点也是节点的最大值,计算从s到t的最大流
    {
     int f=0;//最大流
     int a[Max];//记录当前路径的容许的最大流
     bool visit[Max];
     int flow[Max][Max];//记录边i到j已占用了的流量
     int p[Max];//记录流的上一个结点,即从p[i]流向i
     int u,i;
     queue<int> q;
     memset(flow,0,sizeof(flow));
     while(1)
     {
      memset(visit,0,sizeof(visit));
      memset(a,0,sizeof(a));
      a[s]=INT_MAX;
      visit[s]=1;
      q.push(s);
      while(!q.empty())
      {
       u=q.front();
       q.pop();
       for(i=1;i<=t;i++)
       {
        if(!visit[i]&&cap[u][i]-flow[u][i]>0)
        {
         visit[i]=1;
         a[i]=min(a[u],cap[u][i]-flow[u][i]);
         p[i]=u;
         q.push(i);
        }
       }
      }
      if(a[t]==0)break;
      for(i=t;i!=s;i=p[i])
      {
       flow[i][p[i]]-=a[t];
       flow[p[i]][i]+=a[t];
      }
      f+=a[t];
     }
     return f;
    }
    int main()
    {
     int n,m,i,a,b,w;
     while(cin>>n>>m)
     {  
      memset(cap,0,sizeof(cap));  
      for(i=1;i<=n;i++)
      {
       scanf("%d%d%d",&a,&b,&w);
       cap[a][b]+=w;
      }
      cout<<maxflow(1,m)<<endl; 
     }
     return 0;
    }


     

  • 相关阅读:
    子网掩码的作用与IP网段的划分
    DHCP服务器
    Anaconda安装、更新第三方包
    time模块的使用
    TensorFlow安装
    机器学习-线性回归
    机器学习
    Pyhton-类(2)
    python-类(1)
    Python-函数
  • 原文地址:https://www.cnblogs.com/qijinbiao/p/2171777.html
Copyright © 2011-2022 走看看