750. 栅格网络流

http://www.cogs.pro/cogs/problem/problem.php?pid=750

★★☆   输入文件:flowa.in   输出文件:flowa.out   简单对比
时间限制:1 s   内存限制:128 MB

【问题描述】

Bob 觉得一般图的最大流问题太难了,他不知道如何解决,于是他想尝试一个简单点的:栅格网络中的最大流问题,这个虽说简单了一点,但对 Bob 来说依旧太难,现在他有个麻烦需要你帮忙:给你一个 N*M 的栅格(如下所示),栅格中的边表示可以流水的管道,边上的数字表示管道的容量,举例说明:在下面图( 2.6.1 )中, (0,0) 和 (1,0) 之间边的容量为 6 ,这意味着这条边(水管)的最大水流量不超过 6 个单位。

N=3 M=3
图 2.6.1 栅格网络流

那么栅格中从 S 到 T 的最大流是多少呢 ? 换句话说 , 某一时刻最多能有多少单位的水从 S 流向 T?

【输入格式】

输入文件的第一行是一个正整数 T ,表示接下来有多少组测试数据。

每一组测试数据的第一行有两个正整数 N,M(1<=N,M<=100)<n<100) 和="" m(1<m<100)="" 。接下来有两个整数矩阵="" h="" (="" n*(m-1)="" )和="" v="" (n-1)*m="" ),="" h[i][j]="" 表示="" (i,j)="" 与="" (i,j+1)="" 之间边的容量,="" v[i][j]="" (i+1,j)="" 中所有的数均非负且小于="" 10^10="" 。<="" p="">

接着有两个矩阵H(N*(M-1)),V((N-1)*M),H[i][j]表示(i,j)->(i,j+1)的流量;

V[i][j]表示(i,j)->(i+1,j)的流量。

【输出格式】

每一组测试数据输出只有一行,包含一个整数,即从 S(0,0) 到 T(N-1,M-1) 的栅格网络的最大流,不允许出现多余的空格。

【输入样例】

输入文件名: flowa .in

1
3 3
0 1
2 3
4 5
6 7 8
9 10 11

输出文件名: flowa .out

6

提示:下图 (2.6.2) 所示即为样例中栅格中的一个最大流。

N=3 M=3
图 2.6.2 一个解决方案

平面图转对偶图求最小割

#include<cstdio>
#include<queue>
#include<cstring>
#define N 10010
#define M 50010
using namespace std;
int T,n,m,ans,tot;
int src,dec,next[M],to[M],front[N],cap[M];
long long DIS[N];
struct edge
{
int number;
long long dis;
bool operator <(edge b) const
{
return dis>b.dis;
}
}e[M];
priority_queue<edge>q;
void add(int u,int v,int w)
{
to[++tot]=v;next[tot]=front[u];front[u]=tot;cap[tot]=w;
to[++tot]=u;next[tot]=front[v];front[v]=tot;cap[tot]=w;
}
bool dijkstra()
{
for(int i=;i<=dec;i++) DIS[i]=2e9;
q.push((edge){,});
while(!q.empty())
{
edge now=q.top();q.pop();
if(DIS[now.number]!=now.dis) continue;
for(int i=front[now.number];i;i=next[i])
{
if(DIS[to[i]]>DIS[now.number]+1ll*cap[i])
{
DIS[to[i]]=DIS[now.number]+1ll*cap[i];
q.push((edge){to[i],DIS[to[i]]});
}
}
}
printf("%d\n",DIS[dec]);
}
void pre()
{
tot=;
memset(front,,sizeof(front));
}
int main()
{
freopen("flowa.in","r",stdin);
freopen("flowa.out","w",stdout);
scanf("%d",&T);
while(T--)
{
pre();
scanf("%d%d",&n,&m);
int x;
for(int i=;i<=n;i++)
for(int j=;j<m;j++)
{
scanf("%d",&x);
add((i-)*(m+)+j,(i*(m+)+j),x);
}
for(int i=;i<n;i++)
for(int j=;j<=m;j++)
{
scanf("%d",&x);
add(i*(m+)+j-,i*(m+)+j,x);
}
dec=(n+)*(m+)-;
for(int i=m+;i+m+<=dec;i+=m+) add(src,i,);
for(int i=n*(m+)+;i<dec;i++) add(src,i,);
for(int i=;i<m;i++) add(i,dec,);
for(int i=*m+;i+m<=dec;i+=m+) add(i,dec,);
dijkstra();
}
return ;
}

优先队列 重载运算符 记住 里面是< 重载为 >

COGS 栅格网络流的更多相关文章

  1. [网络流24题] COGS 750 栅格网络流

    750. 栅格网络流 ★★☆   输入文件:flowa.in   输出文件:flowa.out   简单对比时间限制:1 s   内存限制:128 MB [问题描述] Bob 觉得一般图的最大流问题太 ...

  2. COGS 750. 栅格网络流

    ★★☆   输入文件:flowa.in   输出文件:flowa.out   简单对比时间限制:1 s   内存限制:128 MB [问题描述] Bob 觉得一般图的最大流问题太难了,他不知道如何解决 ...

  3. 栅格网络流(cogs 750)

    [问题描述] Bob 觉得一般图的最大流问题太难了,他不知道如何解决,于是他想尝试一个简单点的:栅格网络中的最大流问题,这个虽说简单了一点,但对 Bob 来说依旧太难,现在他有个麻烦需要你帮忙:给你一 ...

  4. cogs750栅格网络流(最小割)

    750. 栅格网络流 ★★☆   输入文件:flowa.in   输出文件:flowa.out   简单对比时间限制:1 s   内存限制:128 MB [问题描述] Bob 觉得一般图的最大流问题太 ...

  5. Cogs 14. [网络流24题] 搭配飞行员

    这道题其实蛮好想的,因为分为正,副飞行员.所以就把正飞行员当作Boy,副飞行员当作Girl.然后做Hungry即可. #include<bits/stdc++.h> using names ...

  6. [COGS 0014][网络流24题] 搭配飞行员

    先贴题面 14. [网络流24题] 搭配飞行员 ★★☆   输入文件:flyer.in   输出文件:flyer.out简单对比时间限制:1 s   内存限制:128 MB [问题描述]     飞行 ...

  7. Cogs 732. [网络流24题] 试题库(二分图)

    [网络流24题] 试题库 ★★ 输入文件:testlib.in 输出文件:testlib.out 评测插件 时间限制:1 s 内存限制:128 MB «问题描述: 假设一个试题库中有n道试题.每道试题 ...

  8. Cogs 739. [网络流24题] 运输问题(费用流)

    [网络流24题] 运输问题 ★★ 输入文件:tran.in 输出文件:tran.out 简单对比 时间限制:1 s 内存限制:128 MB «问题描述: «编程任务: 对于给定的m 个仓库和n 个零售 ...

  9. Cogs 727. [网络流24题] 太空飞行计划(最大权闭合子图)

    [网络流24题] 太空飞行计划 ★★☆ 输入文件:shuttle.in 输出文件:shuttle.out 简单对比 时间限制:1 s 内存限制:128 MB [问题描述] W 教授正在为国家航天中心计 ...

随机推荐

  1. python learning Process and Thread.py

    # 多进程 # Windows下面没有fork ,请在linux下跑下面的代码 import os print('Process (%s) start...' % os.getpid()) pid = ...

  2. frist Django app — 一、 创建工程(转载)

    转载地址:https://www.cnblogs.com/sunshine-2015/p/5658283.html 缘起 既然python都学了,学习python的时候感觉是相见恨晚,一种新的编程语言 ...

  3. 团队作业4——第一次项目冲刺(Alpha版本)2017.11.16

    1.当天站立式会议照片 本次会议在5号公寓3楼召开,本次会议内容:①:熟悉每个人想做的模块.②:根据老师的要求将项目划分成一系列小任务.③:在上次会议内容完成的基础上增加新的任务. 2.每个人的工作 ...

  4. Python开发【第五篇】迭代器、生成器、递归函数、二分法

    阅读目录 一.迭代器 1. 迭代的概念 #迭代器即迭代的工具(自定义的函数),那什么是迭代呢? #迭代:指一个重复的过程,每次重复都可以称之为一次迭代,并且每一次重复的结果是下一个迭代的初始值(例如: ...

  5. vm的三种网络模式

    Vm网卡的模式:网络地址转换模式(nat),仅主机(host-only),桥接模式(Brideged) VMware 的几个虚拟设备: ■ VMnet0:这是 VMware 用于虚拟桥接网络下的虚拟交 ...

  6. 如何快速地编写和运行一个属于自己的 MapReduce 例子程序

    大数据的时代, 到处张嘴闭嘴都是Hadoop, MapReduce, 不跟上时代怎么行? 可是对一个hadoop的新手, 写一个属于自己的MapReduce程序还是小有点难度的, 需要建立一个mave ...

  7. ERROR 1698 (28000): Access denied for user 'root'@'localhost' 解决方法

    之前MySQL服务端本机上使用密码登陆root账号是没有问题的,但是今天不知道是因为动了哪里,登陆失败并有这个错误代码: ~$ mysql -u root -p Enter password: ERR ...

  8. Android Service执行unbind后再次执行bind的问题

    在执行了startService.bindService.unbindService之后,再次执行bindService.这时发现Service的onBind方法并没有执行,而是执行的onRebind ...

  9. linux下安装java jdk

    第一步:查看java对应版本               yum search java 我自己装的是1.8版本的java包 第二步:装java包 yum install java-1.8.0-ope ...

  10. 【移动端debug-5】可恶的1px万能实现方案

    最近和设计同学调ui,遇到的是一位对1px有极致追求的同学,像素眼一眼看出我写的是不是1px,所以让我好好地研究了一番1px到底怎么写最方便. 一.为什么出不来1px? 简而言之:css的1px只是一 ...