[网络流24题] COGS 750 栅格网络流
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 一个解决方案
/*
网格图的最小割问题
很明显如果写最大流一定会超时,所以可以利用最大流最小割定理解决。
我们可以在某条边i的两侧加两个点,连一条边j,使两条边切割,这样建图的话,最小割就等于新图的最短路,
只要多加起点和终点就可以跑最短路了。
dijkstral+堆优化
用最短路来处理 最小割 好像只适用于 网格最小割
*/
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<queue>
#include<cstdio>
using namespace std;
#define N 20010
#define INF 100000000000000LL
#define LL long long
int head[N],n,m,tot,ans,S,T; LL dis[N];
struct Edge{
int v,w,next;
}e[N*];
int Make_hao(int i,int j){return (i-)*(m+)+j;}
void Add_Edge(int u,int v,int w){
e[++tot].v=v;e[tot].w=w;
e[tot].next=head[u];head[u]=tot;
}
void Dijkstra(){
priority_queue<int>q;
for(int i=S;i<=T;i++)dis[i]=-INF;
dis[S]=;q.push(S);
while(!q.empty()){
int u=q.top();q.pop();
for(int i=head[u];i;i=e[i].next){
int v=e[i].v;
if(dis[v]<dis[u]+(LL)e[i].w){
dis[v]=dis[u]+(LL)e[i].w;
q.push(v);
}
}
}
cout<<-dis[T]<<endl;
}
void Solve(){
scanf("%d%d",&n,&m);
S=;T=(n+)*(m+)+;
for(int i=;i<=n;i++)
for(int j=,x;j<=m;j++){
scanf("%d",&x);
Add_Edge(Make_hao(i,j),Make_hao(i+,j),-x);
Add_Edge(Make_hao(i+,j),Make_hao(i,j),-x);
}
for(int i=;i<=n;i++)
for(int j=,x;j<=m;j++){
scanf("%d",&x);
Add_Edge(Make_hao(i,j),Make_hao(i,j+),-x);
Add_Edge(Make_hao(i,j+),Make_hao(i,j),-x);
}
for(int i=;i<=m;i++)Add_Edge(S,i,);
for(int i=*m+;i<=T-;i+=(m+))Add_Edge(S,i,);
for(int i=m+;i<=T-;i+=(m+))Add_Edge(i,T,);
for(int i=n*(m+)+;i<=T-;i++)Add_Edge(i,T,);
Dijkstra();
}
int main(){
freopen("flowa.in","r",stdin);
freopen("flowa.out","w",stdout);
int T;scanf("%d",&T);
while(T--){
memset(head,,sizeof(head));
tot=;Solve();
}
return ;
}
[网络流24题] COGS 750 栅格网络流的更多相关文章
- Libre 6012 「网络流 24 题」分配问题 (网络流,费用流)
Libre 6012 「网络流 24 题」分配问题 (网络流,费用流) Description 有n件工作要分配给n个人做.第i个人做第j件工作产生的效益为\(c_{ij}\).试设计一个将n件工作分 ...
- Libre 6011 「网络流 24 题」运输问题 (网络流,最小费用最大流)
Libre 6011 「网络流 24 题」运输问题 (网络流,最小费用最大流) Description W 公司有m个仓库和n个零售商店.第i个仓库有\(a_i\)个单位的货物:第j个零售商店需要\( ...
- [网络流24题] COGS 搭配飞行员
14. [网络流24题] 搭配飞行员 ★★☆ 输入文件:flyer.in 输出文件:flyer.out 简单对比时间限制:1 s 内存限制:128 MB [问题描述] 飞行大队 ...
- LibreOJ 6004. 「网络流 24 题」圆桌聚餐 网络流版子题
#6004. 「网络流 24 题」圆桌聚餐 内存限制:256 MiB时间限制:5000 ms标准输入输出 题目类型:传统评测方式:Special Judge 上传者: 匿名 提交提交记录统计讨论测试数 ...
- liberOJ#6006. 「网络流 24 题」试题库 网络流, 输出方案
#6006. 「网络流 24 题」试题库 题目描述 假设一个试题库中有 n nn 道试题.每道试题都标明了所属类别.同一道题可能有多个类别属性.现要从题库中抽取 m mm 道题组成试卷.并要求 ...
- COGS 750. 栅格网络流
★★☆ 输入文件:flowa.in 输出文件:flowa.out 简单对比时间限制:1 s 内存限制:128 MB [问题描述] Bob 觉得一般图的最大流问题太难了,他不知道如何解决 ...
- [cogs736][网络流24题#13]星际转移[网络流,网络判定]
将一个空间站分为天数个点,每次枚举天数,每增加一天就把对应天数的边连上,用网络流判定可行性,即-判断最大流是否不小于k,注意编号不要错位.通过此题,可见一些网络流题目需要用到网络判定方法,但虽然答案具 ...
- [网络流24题] COGS 运输问题1
11. 运输问题1 ★★☆ 输入文件:maxflowa.in 输出文件:maxflowa.out 简单对比时间限制:1 s 内存限制:128 MB [问题描述] 一个工厂每天生 ...
- [cogs396] [网络流24题#4] 魔术球 [网络流,最大流,最小路径覆盖]
本题枚举每多一个球需要多少个柱子,可以边加边边计算,每次只需要判断$i-Dinic()$即可:特别注意边界. #include <iostream> #include <algori ...
随机推荐
- POJ 1222 反转
EXTENDED LIGHTS OUT Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 12469 Accepted: 7 ...
- Hibernate---开发环境搭建
下载安装Hibernate 在官网http://hibernate.org/tools/上下载eclipse安装插件的文件/安装插件的地址.点击download选择JBoss Tools,选择Arti ...
- JavaSE总结--多线程
进程: 进程之间内存隔离,内存不共享. 线程: 可以共享内存. 每个线程都是一个栈. 多线程的好处: 1)防止程序阻塞. wait与notify的区别: 针对等待队列而言. wait:进入等待队列.必 ...
- LDAP操作的两种方案
最近由于项目需要研究了一下LDAP相关知识,感觉对没接触过的人来说还是有点坑的,所以记录下来给大家分享. 由于是第一次接触,就在网上搜了一些相关的文章,照着示例代码测试,却怎么也连不上LDAP服务器, ...
- 《Cracking the Coding Interview》——第6章:智力题——题目3
2014-03-20 00:48 题目:有3升的瓶子和5升的瓶子,只允许倒满.倒到满为止.或是泼光三种操作,怎么搞出4升水呢? 解法:如果A和B是互质的两个正整数,且A<B,令X=B-A,则(X ...
- js对数组去重的完整版
数组去重是很常见的一个需求,而各种各样的姿势也很多,常见的如indexOf,或者hash,但是他们还是有缺陷,这里我查了一些资料做补充. 一般方式 //一般方法->使用indexOf Array ...
- 小程序使用Canvas画饼图
先上效果图 -------------------------------------------------------------wxml代码开始------------------------- ...
- yum源是什么
我们安装软件的时候需要下载软件,将很多软件放在一起就是源.软件安装包的来源. 所以yum源就是软件安装包来源. 如果我们是在线的,他会在网上给你下载安装包,如果是离线的没有网络.那么就只能配置本地的y ...
- NGUI-为Popuplist的下拉选项添加删除功能
NGUI例子里的popuplist是这样的:,但有时我们希望下拉选项都有删除功能,也就是这样:,一种方法是改popuplist的源码,我想这个实现起来不难,但现在我想说的是用反射来实现此功能,以及其他 ...
- 【视觉SLAM14讲】ch3课后题答案
1.验证旋转矩阵是正交矩阵 感觉下面这篇博客写的不错 http://www.cnblogs.com/caster99/p/4703033.html 总结一下:旋转矩阵是一个完美的矩阵——正交矩阵.①行 ...