poj1273 Drainage Ditches (最大流裸题)

问题描述

每当约翰的田里下雨,贝西最喜欢的三叶草地里就会形成一个池塘。这意味着三叶草被水覆盖了一段时间,需要很长时间才能重新生长。因此,农夫约翰建了一套排水沟,这样贝西的苜蓿地就不会被水覆盖了。相反,水被排到附近的小溪。作为一名一流的工程师,农夫约翰还在每条水沟的开头安装了调节器,这样他就能控制水流进水沟的速度。
农夫约翰不仅知道每分钟每条沟渠能输送多少加仑的水,还知道沟渠的精确布局,这些沟渠从池塘里流出,相互流入,形成一个潜在的复杂网络。
根据所有这些信息,确定水从池塘中进入小溪的最大速度。对于任何给定的沟渠,水只朝一个方向流动,但可能有一种方式可以让水在一个圆圈中流动。

输入

输入包括几种情况。对于每种情况,第一行包含两个空格分隔的整数,N (0 <= N <= 200)和M (2 <= M <= 200)。N是农民约翰挖的沟的数目。M是这些沟渠的交叉点个数。交叉口1是池塘。交点M是流。下面N行中的每一行都包含三个整数,Si、Ei和Ci。Si和Ei (1 <= Si, Ei <= M)表示该沟渠流经的交叉口。水将通过这条沟从Si流到Ei。Ci (0 <= Ci <= 10,000,000)是水流通过沟渠的最大速度。

输出

对于每种情况,输出一个整数,即从池塘中排空水的最大速度。

Sample Input

5 4
1 2 40
1 4 20
2 4 20
2 3 30
3 4 10

Sample Output

50

EK:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<vector>
#include<cmath>
#include<queue>
#include<algorithm>
typedef long long ll;
const int inf=0x3f3f3f3f;
const int inn=0x80808080;
using namespace std;
const int maxm=205;
int n,m;
int g[maxm][maxm];
int pre[maxm];
int bfs(int s,int t){//bfs一遍标记反向路径
    memset(pre,-1,sizeof pre);
    pre[s]=s;
    queue<int>q;
    q.push(s);
    while(!q.empty()){
        int x=q.front();
        q.pop();
        for(int i=1;i<=n;i++){
            if(pre[i]==-1&&g[x][i]){//如果没标记过(即没走过)且容量不为0(容量为0表示没有路)
                pre[i]=x;
                if(i==t)return 1;
                q.push(i);
            }
        }
    }
    return 0;
}
int ek(int s,int t){
    int ans=0;
    while(bfs(s,t)){
        int d=inf;
        for(int i=t;i!=s;i=pre[i]){//找最小detla
            if(g[pre[i]][i]<d){
                d=g[pre[i]][i];
            }
        }
        for(int i=t;i!=s;i=pre[i]){
            g[pre[i]][i]-=d;//正边减少
            g[i][pre[i]]+=d;//反边增加
        }
        ans+=d;
    }
    return ans;
}
int main(){
    while(cin>>m>>n){//个人习惯把n作为节点数量,m作为路径数量,题目是反的
        memset(g,0,sizeof g);//容量为0表示没有路
        for(int i=1;i<=m;i++){
            int a,b,c;
            cin>>a>>b>>c;
            g[a][b]+=c;//重边合并成一条边
        }
        cout<<ek(1,n)<<endl;
    }
    return 0;
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
毕业设计,基于SpringBoot+Vue+MySQL开发的纺织品企业财务管理系统,源码+数据库+毕业论文+视频演示 在如今社会上,关于信息上面的处理,没有任何一个企业或者个人会忽视,如何让信息急速传递,并且归档储存查询,采用之前的纸张记录模式已经不符合当前使用要求了。所以,对纺织品企业财务信息管理的提升,也为了对纺织品企业财务信息进行更好的维护,纺织品企业财务管理系统的出现就变得水到渠成不可缺少。通过对纺织品企业财务管理系统的开发,不仅仅可以学以致用,让学到的知识变成成果出现,也强化了知识记忆,扩大了知识储备,是提升自我的一种很好的方法。通过具体的开发,对整个软件开发的过程熟练掌握,不论是前期的设计,还是后续的编码测试,都有了很深刻的认知。 纺织品企业财务管理系统通过MySQL数据库与Spring Boot框架进行开发,纺织品企业财务管理系统能够实现对财务人员,员工,收费信息,支出信息,薪资信息,留言信息,报销信息等信息的管理。 通过纺织品企业财务管理系统对相关信息的处理,让信息处理变的更加的系统,更加的规范,这是一个必然的结果。已经处理好的信息,不管是用来查找,还是分析,在效率上都会成倍的提高,让计算机变得更加符合生产需要,变成人们不可缺少的一种信息处理工具,实现了绿色办公,节省社会资源,为环境保护也做了力所能及的贡献。 关键字:纺织品企业财务管理系统,薪资信息,报销信息;SpringBoot
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值