★★☆   输入文件: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 一个解决方案

妈蛋

dfs return res  写成了 return true

找了好久 

屠龙宝刀点击就送

#include <cstring>
#include <cstdio>
#include <queue>
#define N 100000
#define inf 0x3f3f3f3f using namespace std;
int t,n,m,cnt=,S,T,to[N<<],cur[N],dep[N],head[N],nextt[N<<],flow[N<<];
inline void ins(int u,int v,int f)
{
nextt[++cnt]=head[u];to[cnt]=v;flow[cnt]=f;head[u]=cnt;
nextt[++cnt]=head[v];to[cnt]=u;flow[cnt]=f;head[v]=cnt;
}
bool bfs()
{
for(int i=S;i<=T;++i) dep[i]=-,cur[i]=head[i];
dep[S]=;
queue<int>q;
q.push(S);
for(int u;!q.empty();)
{
u=q.front();
q.pop();
for(int i=head[u];i;i=nextt[i])
{
int v=to[i];
if(dep[v]==-&&flow[i])
{
dep[v]=dep[u]+;
q.push(v);
}
}
}
if(dep[T]!=-) return true;
else return false;
}
inline int min(int a,int b) {return a>b?b:a;}
int dfs(int u,int limit)
{
if(u==T||!limit) return limit;
int f,res=;
for(int &i=cur[u];i;i=nextt[i])
{
int v=to[i];
if(dep[v]==dep[u]+&&flow[i]&&(f=dfs(v,min(flow[i],limit))))
{
res+=f;
limit-=f;
flow[i]-=f;
flow[i^]+=f;
if(!limit) break;
}
}
if(res!=limit) dep[u]=-;
return res;
}
inline void init()
{
cnt=;
memset(head,,sizeof(head));
}
int main(int argc,char *argv[])
{
freopen("flowa.in","r",stdin);
freopen("flowa.out","w",stdout);
scanf("%d",&t);
for(;t--;)
{
scanf("%d%d",&n,&m);
S=,T=n*m;
for(int i=;i<=n;++i)
for(int a,j=;j<m;++j)
{
scanf("%d",&a);
if(a) ins((i-)*m+j,(i-)*m+j+,a);
}
for(int i=;i<n;++i)
for(int a,j=;j<=m;++j)
{
scanf("%d",&a);
if(a) ins((i-)*m+j,i*m+j,a);
}
int ans=;
while(bfs()) ans+=dfs(S,inf);
printf("%d\n",ans);
init();
}
fclose(stdin); fclose(stdout);
return ;
}

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

  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. 栅格网络流 http://www.cogs.pro/cogs/problem/problem.php?pid=750 ★★☆   输入文件:flowa.in   输出文件:flowa.out ...

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

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

  5. 栅格网络流(cogs 750)

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

  6. COGS——C 14. [网络流24题] 搭配飞行员

    http://cogs.pro/cogs/problem/problem.php?pid=14 ★★☆   输入文件:flyer.in   输出文件:flyer.out   简单对比时间限制:1 s  ...

  7. 【COGS 461】[网络流24题] 餐巾 最小费用最大流

    既然是最小费用最大流我们就用最大流来限制其一定能把每天跑满,那么把每个表示天的点向T连流量为其所需餐巾,费用为0的边,然后又与每天的餐巾对于买是无限制的因此从S向每个表示天的点连流量为INF,费用为一 ...

  8. 【COGS 14】 [网络流24题] 搭配飞行员 网络流板子题

    用网络流水二分图的模型(存一下板子) #include <cstdio> #include <cstring> #include <algorithm> #defi ...

  9. bootstrap_开始

    bootstrap 一个移动设备优先 UI 库,底层是用 less 写的,依赖于 jQuery. 面试点: bootstrap 的所有盒子都是怪异盒子模型(box-sizing: border-box ...

随机推荐

  1. js常用知识点汇总

    1.json字符串与json对象相互转化(转至:http://www.jb51.net/article/43136.htm) SON字符串: var str1 = '{ "name" ...

  2. .net core 中的配置文件

    前言     在 .NET Core 项目中,配置文件有着举足轻重的地位:与.NetFramework 不同的是,.NET Core 的配置文件都以 .json 结尾,这表示一个标准的 json 格式 ...

  3. Fetch超时设置和终止请求

    1.基本使用 Fetch 是一个新的端获取资源的接口,用于替换笨重繁琐XMLHttpRequest.它有了Request 和 Response 以及Headers对象的概念,与后端语言请求资源更接近. ...

  4. 转:基础篇|PHP如何解决网站大流量和高并发

    基础篇 高并发架构基础概念和优化思路 高并发架构相关概念 并发,在操作系统中,是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行,但任一个时刻点上只有一个程 ...

  5. 2018杭电多校第二场1003(DFS,欧拉回路)

    #include<bits/stdc++.h>using namespace std;int n,m;int x,y;int num,cnt;int degree[100007],vis[ ...

  6. python numpy 判断ndarray 中是否有 nan

    numpy.isnan(myarray).any() 下面讨论了哪一种方法的速度最快 reference: stackoverflow.com/questions/911871/detect-if-a ...

  7. CodeForces - 906D Power Tower(欧拉降幂定理)

    Power Tower CodeForces - 906D 题目大意:有N个数字,然后给你q个区间,要你求每一个区间中所有的数字从左到右依次垒起来的次方的幂对m取模之后的数字是多少. 用到一个新知识, ...

  8. 2017-10-17 NOIP模拟赛2

    a [问题描述]你是能看到第一题的 friends 呢.——hja何大爷对字符串十分有研究,于是天天出字符串题虐杀 zhx.何大爷今天为字符串定义了新的权值计算方法.一个字符串由小写字母组成,字符串的 ...

  9. 线段树 洛谷P3932 浮游大陆的68号岛

    P3932 浮游大陆的68号岛 题目描述 妖精仓库里生活着黄金妖精们,她们过着快乐,却随时准备着迎接死亡的生活. 换用更高尚的说法,是随时准备着为这个无药可救的世界献身. 然而孩子们的生活却总是无忧无 ...

  10. K8S上的ELK和应用日志上报实战

    来源:DevOps ID:Idevops168 本次实战的基础结构如下图所示: 一共有两个Pod:ELK和web应用: ELK的Pod会暴露两个服务,一个暴露logstash的5044端口,给file ...