原题

题目大意

墙壁“X”,空区域(都是人)“.”, 门“D”。

人向门移动通过时视为逃脱,门每秒能出去一个人,人可以上下左右移动,墙阻止移动。

求最优移动方案下,最后一个人逃脱的最短时间。如果有人无法安全逃脱(比如被墙围困住),则输出“impossible”。

解析

对于每个时间进行网络流(二分图匹配人和门)直到匹配到的人数等于总人数的时候输出,最大时间是n*m,大于即为impossible

#include<cstdio>
#include<queue>
#include<cstring>
#define pos(x,y) (x-1)*m+y
using namespace std;
int n,m,T,cnt,dx[]={0,1,0,-1,0},dy[]={0,0,1,0,-1},dis[50][150],lover[150],person,door,vis[15][15],p,QWQ;
bool v[150],mp[50][150],b;
char s[15][15];
queue <int> qx,qy,t; void init()
{
door=person=0;
cnt=0;
p=b=0;
memset(dis,0,sizeof(dis));
memset(vis,0,sizeof(vis));
memset(lover,0,sizeof(lover));
} void bfs(int x,int y)
{
++door;
int rx,ry,tt;
qx.push(x);
qy.push(y);
t.push(0);
vis[x][y]=cnt;
while (!qx.empty())
{
rx=qx.front();ry=qy.front();tt=t.front();
qx.pop();qy.pop();t.pop();
for (int i=1;i<=4;i++)
{
if (s[rx+dx[i]][ry+dy[i]]=='.' && vis[rx+dx[i]][ry+dy[i]]!=cnt)
{
vis[rx+dx[i]][ry+dy[i]]=cnt;
qx.push(rx+dx[i]);qy.push(ry+dy[i]);t.push(tt+1);
dis[door][pos(rx+dx[i],ry+dy[i])]=tt+1;
}
}
}
} void getmap(int t)
{
for (int i=1;i<=n;i++)
for (int j=1;j<=m;j++)
for (int k=1;k<=door;k++)
if (dis[k][pos(i,j)] && dis[k][pos(i,j)]<=t && s[i][j]=='.')
mp[k][pos(i,j)]=1;
else mp[k][pos(i,j)]=0;
} bool find(int x)
{
for (int i=1;i<=n*m;i++)
{
if (!v[i] && mp[x][i])
{
v[i]=1;
if (!lover[i] || find(lover[i]))
{
lover[i]=x;
return 1;
}
}
}
return 0;
} int main()
{
scanf("%d",&QWQ);
while (QWQ--)
{
scanf("%d%d",&n,&m);
init();
for (int i=1;i<=n;i++)
scanf("%s",s[i]+1);
for (int i=1;i<=n;i++)
for (int j=1;j<=m;j++)
if (s[i][j]=='D') ++cnt,bfs(i,j);
else if (s[i][j]=='.') ++person;
for (int i=1;i<=n*m;i++)
{
getmap(i);
for (int j=1;j<=door;j++)
{
memset(v,0,sizeof(v));
if (find(j)) p++;
}
if (p==person)
{
printf("%d\n",i);
b=1;
break;
}
}
if (!b) printf("impossible\n");
}
return 0;
}

[poj] 3057 Evacuation的更多相关文章

  1. POJ 3057 Evacuation 二分+最大流

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

  2. POJ 3057 Evacuation(二分图匹配+BFS)

    [题目链接] http://poj.org/problem?id=3057 [题目大意] 给出一个迷宫,D表示门,.表示人,X表示不可通行, 每个门每时间单位只允许一个人通过, 每个人移动一格的为一时 ...

  3. POJ 3057 Evacuation 题解

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

  4. 【最大匹配+二分答案】POJ 3057 Evacuation

    题目大意 POJ链接 有一个\(X×Y\)的房间,X代表墙壁,D是门,.代表人.这个房间着火了,人要跑出去,但是每一个时间点只有一个人可以从门出去. 问最后一个人逃出去的最短时间,如果不能逃出去,输出 ...

  5. POJ 3057 Evacuation 二分图匹配

    每个门每个时间只能出一个人,那就把每个门拆成多个,对应每个时间. 不断增加时间,然后增广,直到最大匹配. //#pragma comment(linker, "/STACK:10240000 ...

  6. POJ 3057 Evacuation (二分匹配)

    题意:给定一个图,然后有几个门,每个人要出去,但是每个门每个秒只能出去一个,然后问你最少时间才能全部出去. 析:初一看,应该是像搜索,但是怎么保证每个人出去的时候都不冲突呢,毕竟每个门每次只能出一个人 ...

  7. POJ 3057 Evacuation(二分匹配)

    分析: 这是一个时间和门的二元组(t,d)和人p匹配的问题,当我们固定d0时,(t,d0)匹配的人数和t具有单调性. t增加看成是多增加了边就行了,所以bfs处理出p到每个d的最短时间,然后把(t,d ...

  8. TTTTTTTTTTTTT poj 3057 Evacuation 二分图匹配+bfs

    题意:见挑战230页 #include <iostream> #include <cstdio> #include <cstring> #include <c ...

  9. POJ 3057 网络流 Evacuation

    题意: 有一个n×m的房间,四周每个格子要么是墙要么是门.中间部分是墙或者人. 现在所有人要从房间逃出去,每个人的速度为1,也就是每个单位时间只能向上下左右四个方向走一格. 多个人可以站在同一个格子上 ...

随机推荐

  1. 牛客小白月赛2 E 是是非非 【尼姆博弈】

    链接:https://www.nowcoder.com/acm/contest/86/E来源:牛客网 题目描述 坎为水,险阳失道,渊深不测:离为火,依附团结,光明绚丽. 坎卦:水洊至,习坎:君子以常德 ...

  2. SAP BI 常用TCODE

    S.No Tcode Description 1 RSA1 Administrator Work Bench 2 RSA11 Calling up AWB with the IC tree 3 RSA ...

  3. linux环境下nginx配置

    1.反向代理配置 #  nginx/conf/nginx.conf

  4. MySQL字段属性介绍

    引言 这次Qi号分享MySQL字段属性简介.下面资料是Qi号搜集大量资料与个人理解的整理. MySQL提供了一组可以赋给表中各个列的数据类型,每个类型都强制数据满足为该数据类型预先确定的一组规则,例如 ...

  5. php-5.6.26源代码 - opcode执行

    文件 php-5.6.26/Zend/zend_vm_execute.h ZEND_API void execute_ex(zend_execute_data *execute_data TSRMLS ...

  6. mysql 安装常用命令,卸载不干净等

    安装mysql apt-get install mysql-server apt-get install mysql-client sudo apt-get install libmysqlclien ...

  7. PTA 7-12(图) 社交网络图中结点的“重要性”计算 最短路

    7-12(图) 社交网络图中结点的“重要性”计算 (30 分) 在社交网络中,个人或单位(结点)之间通过某些关系(边)联系起来.他们受到这些关系的影响,这种影响可以理解为网络中相互连接的结点之间蔓延的 ...

  8. B-树 动机与结构

    Ps.我们遵循从感性到理性的认知顺序来逐步探索B-树的奥秘,之前经常说的value这里用key(关键码)指代,因为可能存的是字符串,说是value就不合适了. (多图预警!!!建议在WI-FI下观看) ...

  9. Bootstrap3适配IE8浏览器的方法

    <!--[if lte IE 8]> <script src="js/respond.min.js"></script> <script ...

  10. 笔记-python操作mysql

    笔记-python操作mysql 1.      开始 1.1.    环境准备-mysql create database db_python; use db_python; create tabl ...