http://acm.hunnu.edu.cn/online/?action=problem&type=list&courseid=0&querytext=&pageno=31

一个n*n的房间,每个点可能有人和救生装备,两个n*n的矩阵,第一个代表每个点有多少个人,第二个矩阵代表每个点有多少个救生装备,然后每个人在t秒内要是找不到救生装备就会死亡,问能够逃生的最大人数。

如果当前点有人则源点和当前点相连,流量为人数,如果当前点有救生装备,则当前点和汇点相连,流量为装备的数量.

然后中间如果人和装备的最短距离小于等于t,则人和装备相连,流量为INF,因为同一条边人可以走多次.

 #include<iostream>
#include<string.h>
#include<cstring>
#include<algorithm>
#include<queue>
#include<stdio.h>
#include<cstdlib>
using namespace std; const int mmax=;
const int inf=0x3f3f3f3f;
int list[],dis[],gap[],node;
int source,sink,Vs; struct E
{
int to,c,next;
}edg[]; void addedg(int from,int to,int value)
{
edg[node].to = to, edg[node].c = value, edg[node].next = list[from], list[from] = node++;
edg[node].to = from,edg[node].c = , edg[node].next = list[to], list[to] = node ++;
} int dfs(int src,int aug)
{
if(src == sink) return aug;
int flow = ,mid_d = Vs-;
for(int j = list[src];j != -; j = edg[j].next)
if(edg[j].c)
{
if(dis[src] == dis[edg[j].to]+)
{
int t = dfs(edg[j].to,min(aug-flow,edg[j].c));
edg[j].c -= t;
edg[j^].c += t;
flow += t;
if(dis[source] >= Vs) return flow;
if(aug == flow) break;
}
mid_d = min(mid_d,dis[edg[j].to]);
}
if(!flow)
{
if(!(--gap[dis[src]])) dis[source] = Vs;
dis[src] = mid_d+;
++gap[dis[src]];
}
//printf("%d\n",flow);
return flow;
} int maxflow_sap(int src,int ed) //1 m
{
int ans = ;
memset(gap,,sizeof(gap));
memset(dis,,sizeof(dis));
gap[] = Vs = ed;
source = src, sink = ed; while(dis[source] < Vs)
{
ans += dfs(source,inf);
// printf("%d\n",ans);
}
return ans;
} int main()
{
//freopen("a.txt","r",stdin);
int n,t;
int boat[mmax][mmax];
int man[mmax][mmax];
while(~scanf("%d%d",&n,&t))
{
node = ;
memset(list,-,sizeof(list)); for(int i=;i<n;i++)
{
for(int j=;j<n;j++)
{
scanf("%d",&man[i][j]);//源点和人相连
if(man[i][j]>) addedg(*n*n+,i*n+j,man[i][j]);
//printf("%d ",man[i][j]);
}
//printf("\n");
}
for(int i=;i<n;i++)
{
for(int j=;j<n;j++)
{
scanf("%d",&boat[i][j]);//装备和汇点相连
if(boat[i][j]>) addedg(i*n+j+n*n,*n*n+,boat[i][j]);
//printf("%d ",boat[i][j]);
}
//printf("\n");
}
for(int i=;i<n;i++)
{
for(int j=;j<n;j++)
{
if(man[i][j]>)
{
for(int k=;k<n;k++)
{
for(int p=;p<n;p++)
{
if(boat[k][p]>&&abs(k-i)+abs(p-j)<=t)
{ //人与装备相连
addedg(i*n+j,k*n+p+n*n,inf);
//printf("%d %d %d %d\n",i,j,k,p);
}
}
}
}
}
}
int ans=maxflow_sap(*n*n+,*n*n+);
printf("%d\n",ans);
}
return ;
}

HUNAN 11567 Escaping (最大流)的更多相关文章

  1. 【原创】11. MYSQL++ 之 Quoting 与 Escaping

    1. 综述 其实一看到这两个单词的时候我有点莫名其妙,可能英语没有学好,我的理解就是quoting是“引用”的意思,而Escaping是“逃脱”的意思.后来在看到了作者的TUTORIAL之后才大致明白 ...

  2. Java中的函数式编程(六)流Stream基础

    写在前面 如果说函数式接口和lambda表达式是Java中函数式编程的基石,那么stream就是在基石上的最富丽堂皇的大厦. 只有熟悉了stream,你才能说熟悉了Java 的函数式编程. 本文主要介 ...

  3. 使用C#处理基于比特流的数据

    使用C#处理基于比特流的数据 0x00 起因 最近需要处理一些基于比特流的数据,计算机处理数据一般都是以byte(8bit)为单位的,使用BinaryReader读取的数据也是如此,即使读取bool型 ...

  4. HTML 事件(三) 事件流与事件委托

    本篇主要介绍HTML DOM中的事件流和事件委托. 其他事件文章 1. HTML 事件(一) 事件的介绍 2. HTML 事件(二) 事件的注册与注销 3. HTML 事件(三) 事件流与事件委托 4 ...

  5. FILE文件流的中fopen、fread、fseek、fclose的使用

    FILE文件流用于对文件的快速操作,主要的操作函数有fopen.fseek.fread.fclose,在对文件结构比较清楚时使用这几个函数会比较快捷的得到文件中具体位置的数据,提取对我们有用的信息,满 ...

  6. java.IO输入输出流:过滤流:buffer流和data流

    java.io使用了适配器模式装饰模式等设计模式来解决字符流的套接和输入输出问题. 字节流只能一次处理一个字节,为了更方便的操作数据,便加入了套接流. 问题引入:缓冲流为什么比普通的文件字节流效率高? ...

  7. java 字节流与字符流的区别

    字节流与和字符流的使用非常相似,两者除了操作代码上的不同之外,是否还有其他的不同呢?实际上字节流在操作时本身不会用到缓冲区(内存),是文件本身直接操作的,而字符流在操作时使用了缓冲区,通过缓冲区再操作 ...

  8. BZOJ 3504: [Cqoi2014]危桥 [最大流]

    3504: [Cqoi2014]危桥 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1407  Solved: 703[Submit][Status] ...

  9. java I/O流

    输入流(读取数据的流) BufferedInputStream---继承--->FileInputStream--继承--->InputStream------> (1)字节流操作中 ...

随机推荐

  1. mac下elasticsearch安装部署

    下载elaticsearch集成包 优势:封装了对插件的支持,且安装方式较简单 地址:https://github.com/medcl/elasticsearch-rtf 解压到指定目录后,获取该集成 ...

  2. c# 移除数组为空元素

    通过字符串分割取得的数组中,有的时候可能需要处理除掉数组元素值为空的情况,所以可以按照如下代码完成: string rs="";//需要分割的字符串 char[] chspilt= ...

  3. uva12265 Selling Land

    见紫书.(c,h)的更新策略://前面的高度为0了,直接插入因为ans==-c+h,c大,h还小,那么肯定不是最优左上角,更新新加入列的列//新的一列高度最小,就删掉了其他的,只留这个高度从上到下,从 ...

  4. Android studio Github 断开连接

    http://blog.csdn.net/agoodcoolman/article/details/50562301 使用软件:Android studio svn:Github 从github直接从 ...

  5. 【软件构造】(转)Git详解、常用操作与版本图

    版本控制与Git 转自:http://www.cnblogs.com/angeldevil/p/3238470.html 版本控制 版本控制是什么已不用在说了,就是记录我们对文件.目录或工程等的修改历 ...

  6. pc端移动端兼容的大图轮播

    body, html { width: 100%; } * { margin:; padding:; list-style: none; } .haha { list-style-type: none ...

  7. nodejs实现网站数据的爬取

    // 引入https模块,由于我们爬取的网站采用的是https协议 const https = require('https'); // 引入cheerio模块,使用这个模块可以将爬取的网页源代码进行 ...

  8. c++内联函数解析(inline)

    一.基本定义 inline是C++语言中的一个关键字,可以用于程序中定义内联函数,inline的引进使内联函数的定义更加简单.说到内联函数,这里给出比较常见的定义,内联函数是C++中的一种特殊函数,它 ...

  9. 将中文库导入到ARM板子中以解决中文显示乱码的教程

    1.将中文字符集导入到ARM板子中的/usr/fonts/目录下 在这里我们使用的字符集为:DroidSansFallback.ttf 下载地址为:https://pan.baidu.com/s/1e ...

  10. 【Linux】Centos6的iptables防火墙设置

    1,查看防火墙状态 # service iptables status //或 # /etc/init.d/iptables status 2,防火墙的启动.重启,关闭 # service iptab ...