HUNAN 11567 Escaping (最大流)
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 (最大流)的更多相关文章
- 【原创】11. MYSQL++ 之 Quoting 与 Escaping
1. 综述 其实一看到这两个单词的时候我有点莫名其妙,可能英语没有学好,我的理解就是quoting是“引用”的意思,而Escaping是“逃脱”的意思.后来在看到了作者的TUTORIAL之后才大致明白 ...
- Java中的函数式编程(六)流Stream基础
写在前面 如果说函数式接口和lambda表达式是Java中函数式编程的基石,那么stream就是在基石上的最富丽堂皇的大厦. 只有熟悉了stream,你才能说熟悉了Java 的函数式编程. 本文主要介 ...
- 使用C#处理基于比特流的数据
使用C#处理基于比特流的数据 0x00 起因 最近需要处理一些基于比特流的数据,计算机处理数据一般都是以byte(8bit)为单位的,使用BinaryReader读取的数据也是如此,即使读取bool型 ...
- HTML 事件(三) 事件流与事件委托
本篇主要介绍HTML DOM中的事件流和事件委托. 其他事件文章 1. HTML 事件(一) 事件的介绍 2. HTML 事件(二) 事件的注册与注销 3. HTML 事件(三) 事件流与事件委托 4 ...
- FILE文件流的中fopen、fread、fseek、fclose的使用
FILE文件流用于对文件的快速操作,主要的操作函数有fopen.fseek.fread.fclose,在对文件结构比较清楚时使用这几个函数会比较快捷的得到文件中具体位置的数据,提取对我们有用的信息,满 ...
- java.IO输入输出流:过滤流:buffer流和data流
java.io使用了适配器模式装饰模式等设计模式来解决字符流的套接和输入输出问题. 字节流只能一次处理一个字节,为了更方便的操作数据,便加入了套接流. 问题引入:缓冲流为什么比普通的文件字节流效率高? ...
- java 字节流与字符流的区别
字节流与和字符流的使用非常相似,两者除了操作代码上的不同之外,是否还有其他的不同呢?实际上字节流在操作时本身不会用到缓冲区(内存),是文件本身直接操作的,而字符流在操作时使用了缓冲区,通过缓冲区再操作 ...
- BZOJ 3504: [Cqoi2014]危桥 [最大流]
3504: [Cqoi2014]危桥 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1407 Solved: 703[Submit][Status] ...
- java I/O流
输入流(读取数据的流) BufferedInputStream---继承--->FileInputStream--继承--->InputStream------> (1)字节流操作中 ...
随机推荐
- Failed to obtain lock on file /usr/local/nagios/var/ndo2db.lock: Permission denied : Permission denied
Failed to obtain lock on file /usr/local/nagios/var/ndo2db.lock: Permission denied : Permission den ...
- PE基础1
PE文件概述 文件格式 .png ..mp4..gif..dll等等,这些文件都具有不同格式 不能随意修改这些文件,否则将无法打开 PE文件(可执行文件) 学习PE文件目标 掌握PE文件就掌握wino ...
- ubuntu命令行转换图片像素大小
convert -resize 512x256 00433.png 00001.png 1.512和256之间是x(就是字母那个x),用' * '反而会报错 2.这个命令会按照原图的比例进行转换 3. ...
- Navicat将表转为模型
右键数据库 -> 逆向数据库到模型
- 【2018 CCPC网络赛】1001 - 优先队列&贪心
题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=6438 获得最大的利润,将元素依次入栈,期中只要碰到比队顶元素大的,就吧队顶元素卖出去,答案加上他们期中 ...
- [LOJ] 分块九题 7
区间加法,区间乘法,单点查询. 洛谷线段树2 屡清加法乘法的关系,定义答案为 a*mut+add 对于整块: 新的乘w,mut和add都要乘w 新的加w,add加w //Stay foolish,st ...
- linux 如何查看硬盘大小,内存大小等系统信息及硬件信息
一.linux CPU大小[root@idc ~]# cat /proc/cpuinfo |grep "model name" && cat /proc/cpuin ...
- Go:类型断言
一.基本介绍 类型断言:由于接口是一般类型,不知道具体类型,如果要转成具体类型,就需要使用类型断言. 如果希望将一个空接口类型重新转换成对应的类型,那么需要使用类型断言,能转换成功是因为这个空接口原先 ...
- Python能干啥?
Python之py9 Python之py9-录音自动下载 Python之py9-py9作业检查 Python之py9-py9博客情况获取 Python之py9-微信监控获取mp3_url Python ...
- 跟http相关的
http http 中 请求: 请求行 请求方式 采用协议 版本号 网址 请求头 客户端可以接受数据类型 可以接受语言 可以接受的压缩格式 请求 ...