• 运输问题1


    11. 运输问题1

    【问题描述】
        一个工厂每天生产若干商品,需运输到销售部门进行销售。从产地到销地要经过某些城镇,有不同的路线可以行走,每条两城镇间的公路都有一定的流量限制。请你计算,在不考虑其它车辆使用公路的前提下,如何充分利用所有的公路,使产地运输到销地的商品最多,最多能运输多少商品。
    【输入格式】
    输入文件有若干行
    第一行,一个整数n,表示共有n个城市(2<=n<=100),产地是1号城市,销地是n号城市。
    下面有n行,每行有n个数字。第p行第q列的数字表示城镇p与城镇q之间有无公路连接。数字为0表示无,大于0表示有公路,且该数字表示该公路流量。
    【输出格式】
    输出文件有一行
    第一行,1个整数max,表示最大流量为max。
    【输入输出样例】
    6
    0 4 8 0 0 0
    0 0 4 4 1 0
    0 0 0 2 2 0
    0 0 0 0 0 7
    0 0 0 6 0 9
    0 0 0 0 0 0
    8
    一道裸的网络流:
     
     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<algorithm>
     5 #include<queue>
     6 using namespace std;
     7 #define inf 1000000
     8 int n,m,num,x,ans;
     9 int adj[1002];
    10 struct flow{
    11     int s,t,w,next;
    12 }k[10001];
    13 int read(){
    14     int sum=0;char ch=getchar();
    15     while(ch<'0'||ch>'9') ch=getchar();
    16     while(ch>='0'&&ch<='9'){sum=sum*10+ch-'0';ch=getchar();}
    17     return sum;
    18 }
    19 void init(int s,int t,int w){
    20     k[num].s=s;k[num].t=t;k[num].w=w;
    21     k[num].next=adj[s];adj[s]=num++;
    22 }
    23 int dp[1001];
    24 bool bfs(){
    25     memset(dp,0,sizeof(dp));
    26     queue<int>q;
    27     q.push(1);dp[1]=1;
    28     while(!q.empty()){
    29         int o=q.front();q.pop();
    30         for(int i=adj[o];i!=-1;i=k[i].next){
    31             if(!k[i].w||dp[k[i].t]) continue;
    32             dp[k[i].t]=dp[o]+1;
    33             if(k[i].t==n) return true;
    34             q.push(k[i].t);
    35         }
    36     }
    37     return false;
    38     
    39 }
    40 int dfs(int o,int fw){
    41     if(o==n) return fw;
    42     int tmp=fw,u;
    43     for(int i=adj[o];i!=-1;i=k[i].next){
    44         if(!k[i].w||!tmp||dp[k[i].t]!=dp[o]+1) continue;
    45         u=dfs(k[i].t,min(k[i].w,tmp));
    46         if(!u){
    47             dp[k[i].t]=0;continue;
    48         }
    49         k[i].w-=u;k[i^1].w+=u;tmp-=u;
    50     }
    51     return fw-tmp;
    52 }
    53 int main(){
    54     memset(adj,-1,sizeof(adj));
    55     n=read();
    56     for(int i=1;i<=n;++i)
    57         for(int j=1;j<=n;++j){
    58             x=read();
    59             if(x)  init(i,j,x),init(j,i,0);
    60         }
    61     while(bfs())
    62         ans+=dfs(1,inf);
    63     printf("%d
    ",ans);
    64     // while(1);
    65     return 0;
    66 }

    网络流第一题:撒花~!

  • 相关阅读:
    python 语言 yaml文件嵌套另一个yaml
    APP混合原生和H5页面中,appium 与X5内核那些事
    mac appium python 自动化环境搭建遇到的问题
    Appium+Python自动化测试学习笔记
    Appium遇到异常处理
    Android 电池分析工具
    lsof命令使用
    Django入门(一)基础环境搭建
    gunicorn部署Flask服务
    自动化测试-数据驱动实践(126发邮件)
  • 原文地址:https://www.cnblogs.com/Maplers/p/7256511.html
Copyright © 2020-2023  润新知