最大流 紧急疏散evacuate

【HNOI2007】紧急疏散EVACUATE BFS+二分答案+最大流 题目描述发生了火警,所有人员需要紧急疏散!假设每个房间是一个N M的矩形区域。每个格子如果是’.’,那么表示这是一块空地;如果是’X’,那么表示这是一面墙,如果是’D’,那么表示这是一扇门,人们可以从这儿撤出房间。已知门一定在房间的边界上,并且边界上不会有空地。最初,每块空地上都有一个人,在疏散的时候,每一秒钟每个人都可以向上下左右四个方向移动一格,当然他也可以站着不动。疏散开始后,每块空地上就没有 阅读详情
 

1689: [HNOI2007]紧急疏散evacuate

时间限制: 1 Sec  内存限制: 128 MB

题目描述

发生了火警,所有人员需要紧急疏散!假设每个房间是一个N M的矩形区域。每个格子如果是".",那么表示这是一块空地;如果是"X",那么表示这是一面墙,如果是"D",那么表示这是一扇门,人们可以从这儿撤出房间。已知门一定在房间的边界上,并且边界上不会有空地。最初,每块空地上都有一个人,在疏散的时候,每一秒钟每个人都可以向上下左右四个方向移动一格,当然他也可以站着不动。疏散开始后,每块空地上就没有人数限制了(也就是说每块空地可以同时站无数个人)。但是,由于门很窄,每一秒钟只能有一个人移动到门的位置,一旦移动到门的位置,就表示他已经安全撤离了。现在的问题是:如果希望所有的人安全撤离,最短需要多少时间?或者告知根本不可能。

输入

输入文件第一行是由空格隔开的一对正整数N与M,3<=N <=20,3<=M<=20,以下N行M列描述一个N M的矩阵。其中的元素可为字符"."、"X"和"D",且字符间无空格。

输出

只有一个整数K,表示让所有人安全撤离的最短时间,如果不可能撤离,那么输出"impossible"(不包括引号)。

样例输入

5 5  
XXXXX
X...D
XX.XX
X..XX
XXDXX

样例输出

3
   因为每一秒门只能出一个人,所以人可能堵住。因此要把门按时间拆点,
   而答案为二分时间,只要求出空地到每扇门的最短路(最短时间),然后把此空地与门连接(时间为最短路径到二分的时间),边权为一。
    注意拆出的新点标号别重复。。身败名裂。。
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<queue>
#define inf 100000000
using namespace std;
int n,m,a[404][404],cnt=0,door[404],peo[404];
int tim[404][704],adj[5000000],s=0,dep[5000000],e;
int S=0,T;
char tu[25][25];
struct node
{
	int v,l,next;
} lu[5000100];
void add(int u,int v,int l)
{lu[++e].v=v;lu[e].next=adj[u];adj[u]=e;lu[e].l=l;}
int bfs()
{
    memset(dep,0,sizeof(dep));
    queue<int> q;
    dep[S]=1;
    q.push(S);
    while(!q.empty())
    {
        int x=q.front();q.pop();
        for(int i=adj[x];i!=-1;i=lu[i].next)
        {
            int to=lu[i].v;
            if(!dep[to]&&lu[i].l)
            {
                dep[to]=dep[x]+1;
                if(to==T)
                    return 1;
			    q.push(to);
            }
        }
    }
    return 0;
}
int dfs(int x,int fw){
	if(x==T) return fw;
	int tmp=fw,k;
	for(int i=adj[x];i!=-1;i=lu[i].next){
		int v=lu[i].v;
		if(lu[i].l && tmp && dep[v]==dep[x]+1){
			k=dfs(v,min(tmp,lu[i].l));
			if(!k){
				dep[v]=0;
				continue;
			}
			lu[i].l-=k; lu[i^1].l+=k; tmp-=k;
		}
	}
	return fw-tmp;
}
int check(int len)
{
	memset(adj,-1,sizeof(adj));
	e=0;
	int sum=cnt;
	for(int i=1;i<=cnt;i++)
	   if(door[i])
	      for(int j=1;j<=len;j++)
	          tim[i][j]=(i-1)*len+cnt;
	T=300000;
	for(int i=1;i<=cnt;i++)
	   if(peo[i])
	   {
	      add(S,i,1),add(i,S,0);
	   	  for(int j=1;j<=cnt;j++)
	   	     if(door[j])
	   	     {
	   	     	int k=a[i][j];
	   	     	for(k=a[i][j];k<=len;k++)
	   	     	   add(i,tim[j][k],1),add(tim[j][k],i,0);
			 }
	   }
	for(int i=1;i<=cnt;i++)
	   if(door[i])
	   {
	   	    for(int j=1;j<=len;j++)
	             add(tim[i][j],T,1),add(T,tim[i][j],0);
	   }
	int ans=0,tt;
	while(bfs())
	   ans+=dfs(S,inf);
	if(ans>=s)return 1;
	return 0;
}
int main()
{
//	freopen("data.in","r",stdin);
//	freopen("data.out","w",stdout);
	scanf("%d%d",&n,&m);
	for(int i=1;i<=n;i++)
	   scanf("%s",tu[i]+1);
	memset(a,30,sizeof(a));
	for(int i=1;i<=n;i++)
		for(int j=1;j<=m;j++)
		{
			cnt++;
			if(tu[i][j]=='.')
			{
			    s++;
				peo[cnt]=1;
				if(i!=1&&(tu[i-1][j]=='.'||tu[i-1][j]=='D'))a[cnt][cnt-m]=1,a[cnt-m][cnt]=1;
				if(i!=n&&(tu[i+1][j]=='.'||tu[i+1][j]=='D'))a[cnt][cnt+m]=1,a[cnt+m][cnt]=1;
				if(j!=1&&(tu[i][j-1]=='.'||tu[i][j-1]=='D'))a[cnt][cnt-1]=1,a[cnt-1][cnt]=1;
				if(j!=m&&(tu[i][j+1]=='.'||tu[i][j+1]=='D'))a[cnt][cnt+1]=1,a[cnt+1][cnt]=1;
			}
			if(tu[i][j]=='D')
			{
				door[cnt]=1;
			}
		}
	 for(int k=1;k<=cnt;k++)
	   for(int i=1;i<=cnt;i++)
	      for(int j=1;j<=cnt;j++) 
	          if(a[i][j]>a[i][k]+a[k][j])
	              a[i][j]=a[i][k]+a[k][j];
    for(int i=1;i<=cnt;i++)
        if(peo[i])
        {
        	int p=1;
        	for(int j=1;j<=cnt;j++)
        	   if(door[j]&&a[i][j]<1000)
        	       {p=0;break;}
        	if(p==1)
			{
				printf("impossible");
				exit(0);
			}       
		}
    int l=0,r=600,mid,ans=600;
    while(l<=r)
    {
    	mid=(l+r)/2;
    	if(check(mid))
    	    r=mid-1,ans=mid;
    	else
    	    l=mid+1;
	}
    printf("%d",ans);
}


人员疏散模型 基于netlogo的人员疏散模型源代码 立即下载

相关推荐

京东校招笔试真题

笔试真题,祝你找工作成功!笔试真题,祝你找工作成功!

京东2019笔试:紧急疏散(超详细的解法!!!)

体育场突然着火了,现场需要紧急疏散,但是过道真的是太窄了,同时只能容许一个人通过。现在知道了体育场的所有座位分布,座位分布图是一棵树,已知每个座位上都坐了一个人,安全出口在树的根部,也就是1号结点的位置上。其他节点上的人每秒都能向树根部前进一个结点,但是除了安全出口以外,没有任何一个结点可以同时容纳两个及以上的人,这就需要一种策略,来使得人群尽快疏散,问在采取最优策略的情况下,体育场最快可以在多长...

coordinate的博客 2697

应急疏散可视化仿真

应急疏散可视化仿真”是一套基于delta3d的全三维应急可视化疏散仿真平台。目标是使传统的应急指挥三维可视化。将基本功能和业务功能相结合形成统一的应急指挥演示平台。该平台三维引擎部分基于Delta3D,兼容层基于Qt平台,传感器模拟基于Java技术。形成传感器—>应急平台—>指挥员的一整套应急指挥过程形式.

数组表示图结构之邻接表——链式前向星

体育场突然着火了,现场需要紧急疏散,但是过道真的是太窄了,同时只能容许一个人通过。现在知道了体育场的所有座位分布,座位分布图是一棵树,已知每个座位上都坐了一个人,安全出口在树的根部,也就是1号结点的位置上。其他节点上的人每秒都能向树根部前进一个结点,但是除了安全出口以外,没有任何一个结点可以同时容纳两个及以上的人,这就需要一种策略,来使得人群尽快疏散,问在采取最优策略的情况下,体育场最快可以在多长时间内疏散完成。:第一行包含一个正整数n,即树的结点数量(1<=n<=100000)。

weixin_50056251的博客 284

面向紧急疏散的群体仿真技术研究

硕士论文,关于群体仿真的,有参考价值,浙江大学 随着三维动画技术的发展以及硬件运算能力的提高,计算机群体仿真技术得较快的发展,在虚拟现实仿真的应用领域特别是消防安全、城市规划、建筑计等方面也发挥了巨大作。近年来,关于公共安全群体仿真方面的研究主要中在安全通道设计,群体规划与管理,以及紧急疏散仿真等方面。本文主要研究了面向紧急疏散的群体仿真相关技术,建立起了从建模到评价一套群体仿真系统。

消防应急照明和疏散指示系统

消防应急照明和疏散指示系统

紧急疏散(最大子树)

题目描述   体育场突然着火了,现场需要紧急疏散,但是过道真的是太窄了,同时只能容许一个人通过。现在知道了体育场的所有座位分布,座位分布图是一棵树,已知每个座位上都坐了一个人,安全出口在树的根部,也就是1号结点的位置上。其他节点上的人每秒都能向树根部前进一个结点,但是除了安全出口以外,没有任何一个结点可以同时容纳两个及以上的人,这就需要一种策略,来使得人群尽快疏散,问在采取最优策略的情况下,体育场...

qq_41922018的博客 367

delphi android发送与接收广播

在发送广播时,使用`SendBroadcast`函数,并传入广播的Action。在接收广播时,创建一个继承自`TAndroidBroadcastReceiver`的类,并在`onReceive`方法中处理接收到的广播。然后,使用`RegisterBroadcastReceiver`函数注册广播接收器,并在`UnregisterBroadcastReceiver`函数中取消注册。请注意替换示例代码中的`YOUR_ACTION`为实际的广播Action。// 处理接收到的广播。

GuoGuoABC 1207

[HNOI2007]紧急疏散

二分+网络流判定 首先处理出每个人和门间的距离 二分时间,连边时把每个门拆成mid个,一个人能在mid时间内到达,他也可以在这等一会儿,那么这mid个门之间连边 如果可以在x的时间内到达,那么x~mid之间他都可以出去,所以门向门加一连边 奉上未AC代码千万别复制 # include <bits/stdc++.h> # define IL inline # def...

weixin_34194359的博客 192

从时序迷宫到稳定通信:FSMC配置中的时间参数深度解析与实战避坑指南

本文深入解析STM32 FSMC配置中的时间参数,特别是AddressSetupTime和DataSetupTime的实战配置技巧。通过STM32F407连接SRAM的实际案例,提供从理论计算到CubeMX配置的全流程指南,帮助开发者避免常见时序陷阱,确保稳定通信。

nginx7reverse的博客 82

雷达仿真:FMCW TDMA-MIMO 3D点云获取方法

2 信号建模摘要:通过设置时分复用(TDMA)波形结合FMCW毫米波雷达仿真获取目标的距离、速度和方位角3D点云信息。在本案例中,首先通过发射天线交替发射FMCW波形并通过接收天线依次接收回波信号从而得到雷达原始数据,其次对获取的原始数据依次经行距离、速度、角度估计从而输出目标的3D点云。阅读本文档,你将对TDMA-MIMO雷达的基本原理、毫米波雷达距离估计、速度估计以及角度估计的基本原理有所了解,另外CA-CFAR恒虚警以及MUSIC-DOA估计在本案例中也有所涉及。1 TDMA-MIMO原理。

Poulen的博客 6959

简单行人疏散 Java版

一、整体思路 该程序实现了最简单的一个行人疏散模型,程序模拟行人从一个带有出口的封闭房间疏散,墙壁上有疏散方向标志,行人先移动到墙底,然后按照疏散方向往出口移动。 创建一个矩阵,空位设置为0,行人设置为1,墙壁设置为100,出口设置为1000,墙壁和出口的位置手工设置,本程序墙壁为于场地四周,出口位于上方墙壁的中点。行人的位置由随机产生或者手工设定。 具体规则如下: 1、

梦里寻欢 2342

别再乱调了!Zygo MetroPro软件滤波功能保姆级指南,从均值到鲁棒高斯样条一次讲清

本文深入解析Zygo MetroPro软件的滤波功能,从均值滤波到鲁棒高斯样条等九种算法,帮助用户根据测量对象特性选择最佳滤波组合。通过真实工业案例和参数配置指南,提升光学测量数据的准确性和效率,特别适用于硅晶圆、光学镜片等精密测量场景。

weixin_30888413的博客 156

bzoj 1189: [HNOI2007]紧急疏散evacuate 分层图最大流_拆点_二分

bzoj 1189: [HNOI2007]紧急疏散evacuate 分层图最大流_拆点_二分 Code: #include<bits/stdc++.h> #define setIO(s) freopen(s".in","r",stdin) #define maxn 100000 #define inf 100000 ...

EM LGH 192

gephi生成网络关系图_路网拓扑重建专题 (3) 网络图生成

城市道路网建模在获得基础路网之后,需要考虑道路交通网络的描述与表达问题。网络是将现实世界中的事物及其关系进行适当的抽象,构造成由节点和边按照一定规则组成的形式。一个实体网络可以由有限个“节点”集合与“边”集合构成的图表示,即网络表示为。对于一个由个节点组成的无权复杂网络,该图有邻接矩阵,这里。根据研究对象不同,建模方法主要包括原始法[1]和对偶法[2]两种,见图1,字母a-j为交叉口编号...

weixin_39761195的博客 3502

从Reset到Read:深入解析Rolling Shutter曝光流水线

本文深入解析Rolling Shutter(卷帘曝光)的工作原理,重点探讨Reset和Read信号在图像传感器中的关键作用。通过Reset-Read流水线机制,详细解释了曝光控制、时序调优及运动伪影补偿等核心技术,帮助读者理解卷帘曝光在高速摄影和动态场景中的应用。

weixin_42531925的博客 253

BZOJ 1189 HNOI 2007 紧急疏散 evacuate 二分答案 最大流

题目大意:紧急疏散。有一张地图,‘.’表示人,‘D’表示门,人需要走曼哈顿距离的单位时间才1能到达门。一个门一个时刻只能通过一个人。求多长时间能疏散完毕。 思路:二分答案+最大流满流判定。先BFS处理出每个人与门的距离。二分最小时间,然后连边。S向每个人连流量为1的边,每个人向二分的时间之内能到达的门连流量为1的边。每个门向T连流量为t的边。然后最大流判定是否满流。 (数组大小我是瞎开

(╯°口°)╯(┴—┴ 1183

第154章 点云大规模并行处理(GPU加速)

优化点云处理✨ 使用。

yumeiguo的博客 374

【BZOJ1189】[HNOI2007]紧急疏散evacuate【最大流】【二分】

【题目链接】 先处理出每个人到每个门的最短距离。 二分答案mid。 从S到每个人连边,容量为1。 每个门拆为mid个点,第i个点代表第i个时刻的门,每个人向 第(最短距离)个点 ~ 第mid个点 连边。 每个门向T连边。 跑最大流,看是否满流。 一直担心建图错,结果没错,倒是忘了判impossible了。 /* Pigonometry */ #include

BraketBN 1153

使用STM32实现简单的语音识别

此外,还需要将计算机的音频输出连接到外部音频放大器上,以便将测试语音播放到MAX9814麦克风模块。运行STM32代码后,系统将开始采集语音数据,并在采集完成后调用Python脚本进行MFCC特征提取。在本案例中,我们将使用STM32F4开发板、MAX9814麦克风模块和MFCC特征提取算法来实现语音识别。通过这个案例,我们可以了解到如何结合STM32开发板和Python实现语音识别,并可以根据需要进行相关扩展和优化。现在,我们可以编译和烧录STM32代码到开发板中,并准备好测试语音文件。

吃不胖. 1473

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

P3191 [HNOI2007]紧急疏散EVACUATE 最大流 二分

   题目描述 发生了火警,所有人员需要紧急疏散!假设每个房间是一个N M的矩形区域。每个格子如果是'.',那么表示这是一块空地;如果是'X',那么表示这是一面墙,如果是'D',那么表示这是一扇门,人们可以从这儿撤出房间。已知门一定在房间的边界上,并且边界上不会有空地。最初,每块空地上都有一个人,在疏散的时候,每一秒钟每个人都可以向上下左右四个方向移动一格,当然他也可以站着不动。...

weixin_30389003的博客 105

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

[bzoj1189][网络流-最大流][二分]紧急疏散evacuate

Description 发生了火警,所有人员需要紧急疏散!假设每个房间是一个N M的矩形区域。每个格子如果是’.’,那么表示这是一块空地;如果是’X’,那么表示这是一面墙,如果是’D’,那么表示这是一扇门,人们可以从这儿撤出房间。已知门一定在房间的边界上,并且边界上不会有空地。最初,每块空地上都有一个人,在疏散的时候,每一秒钟每个人都可以向上下左右四个方向移动一格,当然他也可以站着不

Rose_max的博客 595

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

BZOJ1189: [HNOI2007]紧急疏散evacuate(二分答案,最大流)

Description 发生了火警,所有人员需要紧急疏散!假设每个房间是一个N M的矩形区域。每个格子如果是'.',那么表示这是一 块空地;如果是'X',那么表示这是一面墙,如果是'D',那么表示这是一扇门,人们可以从这儿撤出房间。已知门 一定在房间的边界上,并且边界上不会有空地。最初,每块空地上都有一个人,在疏散的时候,每一秒钟每个人都 可以向上下左右四个方向移动一格,当然...

weixin_30408309的博客 141

「LuoguP3191」 [HNOI2007]紧急疏散EVACUATE(最大流

Description 发生了火警,所有人员需要紧急疏散!假设每个房间是一个N M的矩形区域。每个格子如果是’.’,那么表示这是一块空地;如果是’X’,那么表示这是一面墙,如果是’D’,那么表示这是一扇门,人们可以从这儿撤出房间。已知门一定在房间的边界上,并且边界上不会有空地。最初,每块空地上都有一个人,在疏散的时候,每一秒钟每个人都可以向上下左右四个方向移动一格,当然他也可以站着...

ali39380的博客 178
上一篇: 天神下凡
下一篇: [NOIP2015] 斗地主
QTY_
博客等级 码龄9年 13粉丝 211原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值