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. (转)关于IC设计的想法 Author :Fengzhepianzhou

    一.工具的使用 工欲善其事,必先利其器.我们做IC设计的需要掌握的工具:仿真(vcs.modelsim),综合工具(dc.QS.ISE),时序分析(pt.其他的).以及后端的一些工具,比如astro. ...

  2. how to use Hexo

    Hexo is a good tool to build a personal blog.Here are some good reference:1: https://hexo.io/zh-cn/d ...

  3. python制作二维码

    1.安装MyQR    pip install MyQR  2.打开pycharm,新建项目文件 from MyQR import myqr 2.1黑白二维码 2.2,彩色动态二维码 3.当前项目本地 ...

  4. [BZOJ3207]:花神的嘲讽(分块解法)

    题目传送门 题目描述:背景花神是神,一大癖好就是嘲讽大J,举例如下:“哎你傻不傻的![hqz:大笨J]”“这道题又被J屎过了!!”“J这程序怎么跑这么快!J要逆袭了!”…… 描述这一天DJ在给吾等众蒟 ...

  5. C语言中函数参数传递的本质是值传递

    数组名做函数参数进行传递时,实际上是是一份该指针的拷贝. 给形参赋予其他值,并不影响实参的值. 类似于: int *p = a;    //a为数组名 p = b;          //b为数组名 ...

  6. 核心动画中的几种layer

    第10章其他有用的层 免责申明(必读!):本博客提供的所有教程的翻译原稿均来自于互联网,仅供学习交流之用,切勿进行商业传播.同时,转载时不要移除本申明.如产生任何纠纷,均与本博客所有人.发表该翻译稿之 ...

  7. js 上传头像img

    <label> <div class="myusercenter-image-none"> <img src="" class=& ...

  8. 洛谷 3519 && bzoj 2213 Difference

    联考考试考到了这个题,随机化40分,现在来秒掉它吧. 题意: 给一个字符串,求其中的一段,使得出现次数最多的字符与出现次数最少的字符的出现次数之差最大. 输入输出样例 输入样例#1: 复制 10 aa ...

  9. [CF] 950A Left-handers, Right-handers and Ambidexters

    A. Left-handers, Right-handers and Ambidexters time limit per test1 second memory limit per test256 ...

  10. Redis主从配置与数据备份还原

    一.主从配置: 1.下载: wget http://download.redis.io/releases/redis-4.0.9.tar.gz tar xzf redis-4.0.9.tar.gz c ...