COGS 栅格网络流
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 栅格网络流的更多相关文章
- [网络流24题] COGS 750 栅格网络流
750. 栅格网络流 ★★☆ 输入文件:flowa.in 输出文件:flowa.out 简单对比时间限制:1 s 内存限制:128 MB [问题描述] Bob 觉得一般图的最大流问题太 ...
- COGS 750. 栅格网络流
★★☆ 输入文件:flowa.in 输出文件:flowa.out 简单对比时间限制:1 s 内存限制:128 MB [问题描述] Bob 觉得一般图的最大流问题太难了,他不知道如何解决 ...
- 栅格网络流(cogs 750)
[问题描述] Bob 觉得一般图的最大流问题太难了,他不知道如何解决,于是他想尝试一个简单点的:栅格网络中的最大流问题,这个虽说简单了一点,但对 Bob 来说依旧太难,现在他有个麻烦需要你帮忙:给你一 ...
- cogs750栅格网络流(最小割)
750. 栅格网络流 ★★☆ 输入文件:flowa.in 输出文件:flowa.out 简单对比时间限制:1 s 内存限制:128 MB [问题描述] Bob 觉得一般图的最大流问题太 ...
- Cogs 14. [网络流24题] 搭配飞行员
这道题其实蛮好想的,因为分为正,副飞行员.所以就把正飞行员当作Boy,副飞行员当作Girl.然后做Hungry即可. #include<bits/stdc++.h> using names ...
- [COGS 0014][网络流24题] 搭配飞行员
先贴题面 14. [网络流24题] 搭配飞行员 ★★☆ 输入文件:flyer.in 输出文件:flyer.out简单对比时间限制:1 s 内存限制:128 MB [问题描述] 飞行 ...
- Cogs 732. [网络流24题] 试题库(二分图)
[网络流24题] 试题库 ★★ 输入文件:testlib.in 输出文件:testlib.out 评测插件 时间限制:1 s 内存限制:128 MB «问题描述: 假设一个试题库中有n道试题.每道试题 ...
- Cogs 739. [网络流24题] 运输问题(费用流)
[网络流24题] 运输问题 ★★ 输入文件:tran.in 输出文件:tran.out 简单对比 时间限制:1 s 内存限制:128 MB «问题描述: «编程任务: 对于给定的m 个仓库和n 个零售 ...
- Cogs 727. [网络流24题] 太空飞行计划(最大权闭合子图)
[网络流24题] 太空飞行计划 ★★☆ 输入文件:shuttle.in 输出文件:shuttle.out 简单对比 时间限制:1 s 内存限制:128 MB [问题描述] W 教授正在为国家航天中心计 ...
随机推荐
- 2018软工实践—Beta冲刺(3)
队名 火箭少男100 组长博客 林燊大哥 作业博客 Beta 冲鸭鸭鸭! 成员冲刺阶段情况 林燊(组长) 过去两天完成了哪些任务 软件接口编写修正 自动化测试脚本编写 技术文稿更新 展示GitHub当 ...
- LCA(最近公共祖先)算法
参考博客:https://blog.csdn.net/my_sunshine26/article/details/72717112 首先看一下定义,来自于百度百科 LCA(Lowest Common ...
- KEIL C51程序中如何嵌入汇编
模块内接口:使用如下标志符:#pragma asm汇编语句#pragma endasm注意:如果在c51程序中使用了汇编语言,注意在Keil编译器中需要激活Properties中的“Generate ...
- mysql-master-ha 实现mysql master的高可用。
常用的mysql 高可用有下面几种方案: 名称 原理 特点 mysqlmha Perl脚本对mysql master做心跳,master down了以后,选举new master ,是要改代理层的 ...
- office 格式刷双击无法启用连刷模式
1.问题所在是双击被设置太快了导致office无法接受,请设置成下图中的中等速度即可. 2.可使用快捷键代替 Ctrl+Shift+c(复制格式)Ctrl+Shift+v(粘贴格式)
- 【转】LINQ多表关联关联条件
转:http://www.dingcankong.com/linq%E4%B8%A4%E8%A1%A8%E8%81%94%E5%90%88%E6%9F%A5%E8%AF%A2/ 答案如下: var m ...
- png?wxfrom=5&wx_lazy=1
作为一名游戏行业的视频&平面设计师,平时的工作就是为公司发行的游戏制作宣传视频.广告.平面宣传图,打交道最多的自然就是Adobe家族的设计软件,Photoshop.AfterEffects.P ...
- BZOJ 2527 Meteors | 整体二分
BZOJ 2527 Meteors 题意 一个圆环上有m个位置,编号为1~m,分别属于n个国家. 有k个时刻,每个时刻都会给圆环上的一个区间中每个位置的值加上一个数. 每个国家有一个目标,问对于每个国 ...
- Linux进程间通信(消息队列/信号量+共享内存)
写在前面 不得不说,Deadline果真是第一生产力.不过做出来的东西真的是不堪入目,于是又花了一早上重写代码. 实验内容 进程通信的邮箱方式由操作系统提供形如 send()和 receive()的系 ...
- 【bzoj3570】 Cqoi2014—通配符匹配
http://www.lydsy.com/JudgeOnline/problem.php?id=3507 (题目链接) 题意 给出一个主串,里面有些通配符,'*'可以代替任意字符串或者消失,'?'可以 ...