题目:

题意:

  有人,门(只有边上有,且1s只能出去一个人),和墙,每s人可移动一个格子,问多少秒所有人可以逃出,逃不出输出“impossible”

分析:

  首先,我们先想着样一个问题,如果这个人在某一秒可以到达了这个们,他将可以在这1s之后的任一没人通过此门的时刻出门。而且题意说每个门每一刻只能使1人通过,那么我们可以直接把门分成好多门(1s一个,当然时间有上线),然后让人和这些门去匹配就好了,看一下第几秒可以人都匹配上就好了,当然我们加一个二分不要一个一个跑了,最后复杂度:10(二分)*10*10(人)*10*10(人)*44(门)*100(时间)(有些估算的较大),有点大,不过还是可以的,毕竟这样求匹配的常熟是很小的。当然有人写的是用D去匹配.然后不用二分了,但是这样的复杂度更大了,它是10*10(人)*44(门)*100(时间)*44(门)*100(时间),而且常数可能也大了。最后就是代码。

  

#include <cstdio>
#include <queue>
#include <cstring>
using namespace std;
char ch[][];
const int maxn=***+;
struct E{
int to;
int next;
int val;
}ed[maxn];
int head[maxn],ma[maxn],tot;
bool vis[][];
void J(int a,int b,int c){
ed[++tot].to=b;
ed[tot].val=c;
ed[tot].next=head[a];
head[a]=tot;
}
struct Node{
int x,y,t;
Node(){}
Node(int a,int b,int c){x=a;y=b;t=c;}
};
int x,y;
queue<Node> qu;
int dx[]={,,,-};
int dy[]={,-,,};
int M1(int a,int b){return y*(a-)+b;}
int M2(int a,int b,int t){return (M1(a,b)-)*+t;}
void JIA(int a,int b,int nx,int ny,int t){
for(int i=t;i<=;i++)
J(M1(a,b),M2(nx,ny,i),i);
}
void Bfs(int a,int b){
memset(vis,,sizeof(vis));
vis[a][b]=;
qu.push(Node(a,b,));
while(!qu.empty()){
Node js=qu.front();
qu.pop();
for(int i=;i<;i++){
int nx=js.x+dx[i],ny=js.y+dy[i];
if(nx>=&&nx<=x&&ny>=&&ny<=y&&!vis[nx][ny]&&ch[nx][ny]=='.'){
vis[nx][ny]=;
qu.push(Node(nx,ny,js.t+));
}
if(nx>=&&nx<=x&&ny>=&&ny<=y&&!vis[nx][ny]&&ch[nx][ny]=='D'){
vis[nx][ny]=;
JIA(a,b,nx,ny,js.t+);
}
}
}
}
bool vis2[maxn];
bool Dfs(int x,int t){
for(int i=head[x];i;i=ed[i].next){
if(vis2[ed[i].to]||ed[i].val>t) continue;
vis2[ed[i].to]=;
if(ma[ed[i].to]==||Dfs(ma[ed[i].to],t)){ma[ed[i].to]=x;return ;}
}
return ;
}
bool pd(int t){
memset(ma,,sizeof(ma));
for(int i=;i<=x;i++)
for(int j=;j<=y;j++)
if(ch[i][j]=='.'){
memset(vis2,,sizeof(vis2));
if(!Dfs(M1(i,j),t)) return ;
}
return ;
}
int main(){
int t;
scanf("%d",&t);
for(int jsjs=;jsjs<=t;jsjs++){
scanf("%d%d",&x,&y);
memset(head,,sizeof(head));
tot=;
for(int i=;i<=x;i++) for(int j=;j<=y;j++) scanf(" %c",&ch[i][j]);
for(int i=;i<=x;i++) for(int j=;j<=y;j++) if(ch[i][j]=='.') Bfs(i,j);
int l=,r=;
while(l<=r){
int mid=(l+r)/;
if(pd(mid)) r=mid-;
else l=mid+;
}
if(l==) printf("impossible\n");
else printf("%d\n",l);
}
return ;
}

Evacuation,题解的更多相关文章

  1. POJ 3057 Evacuation 题解

    题目 Fires can be disastrous, especially when a fire breaks out in a room that is completely filled wi ...

  2. Emergency Evacuation 题解

    The Japanese government plans to increase the number of inbound tourists to forty million in the yea ...

  3. POJ3057:Evacuation——题解

    http://poj.org/problem?id=3057 题目大意: .为人,D为门,X为障碍,门每秒只能出去一个人,问多少秒出光. 如果无法出光输出impossible. ——————————— ...

  4. Emergency Evacuation,题解

    题目: 题意: 在某一秒,每个人可以进行一个移动:去旁边座位,去过道,在过道向出口走,求最少多少秒可以让所有人离开(具体如图和样例). 分析: 首先,我们先考虑简单的,只考虑出口前有什么事件发生:1. ...

  5. Codeforces Gym 100002 E "Evacuation Plan" 费用流

    "Evacuation Plan" Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/10 ...

  6. POJ 3057 Evacuation 二分+最大流

    Evacuation 题目连接: http://poj.org/problem?id=3057 Description Fires can be disastrous, especially when ...

  7. POJ2175:Evacuation Plan(消负圈)

    Evacuation Plan Time Limit: 1000MSMemory Limit: 65536KTotal Submissions: 5665Accepted: 1481Special J ...

  8. ICPC — International Collegiate Programming Contest Asia Regional Contest, Yokohama, 2018–12–09 题解

    目录 注意!!此题解存在大量假算法,请各位巨佬明辨! Problem A Digits Are Not Just Characters 题面 题意 思路 代码 Problem B Arithmetic ...

  9. 2016 华南师大ACM校赛 SCNUCPC 非官方题解

    我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...

随机推荐

  1. python3 主机实时监控系统

    主机实时监控系统(可在局域网访问) 一.思路: 前端: 1.管理员登录(编写一个管理员登录界面) 技术:html+css 2.资源数据显示(用于显示主机资源数据情况) 插件:echarts+jquer ...

  2. SpringSceurity(3)---图形验证码功能实现

    SpringSceurity(3)---图形验证码功能实现 有关springSceurity之前有写过两篇文章: 1.SpringSecurity(1)---认证+授权代码实现 2.SpringSec ...

  3. 体验SpringBoot(2.3)应用制作Docker镜像(官方方案)

    关于<SpringBoot-2.3容器化技术>系列 <SpringBoot-2.3容器化技术>系列,旨在和大家一起学习实践2.3版本带来的最新容器化技术,让咱们的Java应用更 ...

  4. Hadoop之hadoop fs和hdfs dfs、hdfs fs三者区别

      适用范围 案例 备注 小记 hadoop fs 使用范围最广,对象:可任何对象       hadoop dfs 只HDFS文件系统相关       hdfs fs 只HDFS文件系统相关(包括与 ...

  5. grafana 如何对数据进行切分

    也就是如何增加筛选,根据想要的条件筛选不同的内容,数据源是prometheus 效果 设置variable 正则表达式 匹配url中IP和端口 切片进阶 根据前一个切片 再过滤 含义说明 instan ...

  6. jenkins初始化启动报错导致进入web页面如法安装插件

    报错如下图所示: 解决方法: #1 查看网卡设置是否正确 #2 确定是否设置域名服务器 #3 查看路由表是否正常 #4 确保可用dns解析 #5 ping一下常见的公网地址

  7. 10 种常用 Matplotlib 图的 Python 代码

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 喜欢的朋友欢迎关注小编,除了分享技术文章之外还有很多福利,私信“资料”可以 ...

  8. cb27a_c++_STL_算法_最小值和最大值

    cb27a_c++_STL_算法_最小值和最大值min_element(b,e) b--begin(), e--end()min_element(b,e,op). op:函数,函数对象,一元谓词.ma ...

  9. docker 镜像删除

    (我们以删除 php-fpm 这个镜像为例子) 一.查看镜像的 ID [root@localhost ~]# docker images REPOSITORY TAG IMAGE ID CREATED ...

  10. Docker图形界面管理

    之前都是使用命令行进行Docker的管理,这里简单介绍一下Docker的图形界面管理.之所以说简单介绍,是因为在生产环境都是集群,很少使用图形界面管理单台Docker主机,所以就演示记录一下,在个人测 ...