如果A到B门要x秒,那么可以把A和x秒及以后的B门建边。 最后,二分时间,然后根据时间建图,跑一遍二分图最大匹配,当然要每个人都能找到匹配的门才能(找到某一秒的门)。 注意细节:(1)建图时要注意根本不能连通的人和门是不能建边的(好吧...在这我犯了逗b错误) (2)根据时间拆门的话,匹配点的总数会比较...
题目链接:http://poj.org/problem?id=3057 题目大概意思是有一块区域组成的房间,房间的边缘有门和墙壁,‘X’代表墙壁,‘D’代表门,房间内部的‘ . ’代表空区域,每个空区域站一个人,人可以向上下左右走,每走一步花费一秒钟,现在房间起火了,所有人向四周的门逃生,但是每秒钟一扇门只能通过一个人,每个人移动...
usingnamespacestd; intT,n,m; charG[15][15]; intcnt1,d[15][15],cnt2,p[15][15]; intdis[255][255]; boolvis[15][15]; structState{ intx,y,d; State(inta,intb,intc):x(a),y(b),d(c){} }; constintdx[]={-1,1,0,0}; constintdy[]={0,0,-1,1}; voidbfs(intx,inty...
[POJ3057] Evacuation题目 原题地址 解说 这个看着像(BFS)一样的东西居然还是个二分图……(当然也要用到(BFS)) 先(BFS)处理处每个人距离每一扇门的最短距离,并分别保存在单独一扇门对应的集合中; 若一个人能到达一扇门,则将该人与之后各时刻该门的建边; 求二分图的最大匹配,看是否能将所有人匹配完;从小...
POJ 3057 网络流 Evacuation,题意:有一个n×m的房间,四周每个格子要么是墙要么是门。中间部分是墙或者人。现在所有人要从房间逃出去,每个人的速度为1,也就是每个单位时间只能向上下左右四个方向走一格。多个人可以站在同一个格子上,但是每个时刻每个门只能通过一格人
POJ 3057 Evacuation | 二分图匹配 1#include<cstdio>2#include<algorithm>3#include<cstring>4#include<vector>5#include<queue>6#defineN 4007usingnamespacestd;8intt,n,m,dis[N][N],vis[N],dx[5]={1,0,-1,0};9intdy[5]={0,1,0,-1};10intd_cnt,ans,adj[N][N],V[N],live,tot,bf...
【题目链接】 http://poj.org/problem?id=3057 【题目大意】 给出一个迷宫,D表示门,.表示人,X表示不可通行, 每个门每时间单位只允许一个人通过, 每个人移动一格的为一时间单位的时间, 问所有人逃离这个迷宫的最小时间 【题解】 我们首先对于每个门进行搜索,求出
POJ - 3057 Fires can be disastrous, especially when a fire breaks out in a room that is completely filled with people. Rooms usually have a couple of exits and emergency exits, but with everyone rushing out at the same time, it may take a while for everyone to escape. ...
二分+二分图匹配+BFS 题意: 墙壁“X”,空区域(都是人)“.”,门“D”。 人向门移动通过时视为逃脱,门每秒能出去一个人,人可以上下左右移动,墙阻止移动。 求最优移动方案下,最后一个人逃脱的最短时间。如果有人无法安全逃脱(比如被墙围困住),则输出“impossible
POJ3057 Evacuation(二分图最大匹配) 人作X部;把门按时间拆点,作Y部;如果某人能在某个时间到达某门则连边。就是个二分图最大匹配。 时间可以二分枚举,或者直接从1枚举时间然后加新边在原来的基础上进行增广。 谨记:时间是个不可忽视的维度。 1#include<cstdio>2#include<cstring>3#include<queue>4#...