Time Limit: 1000MS   Memory Limit: 65536K
Total Submissions: 16313   Accepted: 4291

Description

Bessie hears that an extraordinary meteor shower is coming; reports say that these meteors will crash into earth and destroy anything they hit. Anxious for her safety, she vows to find her way to a safe location (one that is never destroyed by a meteor) . She is currently grazing at the origin in the coordinate plane and wants to move to a new, safer location while avoiding being destroyed by meteors along her way.

The reports say that M meteors (1 ≤ M ≤ 50,000) will strike, with meteor i will striking point (XiYi) (0 ≤ X≤ 300; 0 ≤ Y≤ 300) at time Ti (0 ≤ Ti  ≤ 1,000). Each meteor destroys the point that it strikes and also the four rectilinearly adjacent lattice points.

Bessie leaves the origin at time 0 and can travel in the first quadrant and parallel to the axes at the rate of one distance unit per second to any of the (often 4) adjacent rectilinear points that are not yet destroyed by a meteor. She cannot be located on a point at any time greater than or equal to the time it is destroyed).

Determine the minimum time it takes Bessie to get to a safe place.

Input

* Line 1: A single integer: M
* Lines 2..M+1: Line i+1 contains three space-separated integers: XiYi, and Ti

Output

* Line 1: The minimum time it takes Bessie to get to a safe place or -1 if it is impossible.

Sample Input

4
0 0 2
2 1 2
1 1 2
0 3 5

Sample Output

5

Source

(转自http://poj.org/problem?id=3669)

  首先呢讲一下题目的大意,Bessie从原点出发,然后有N个流星会在某个时刻落下,它们会破坏
砸到的这个方格还会破坏四边相邻的方块,Bessie不能经过被破坏的方块,问Bessie到一个安全的地
方(不会被任何流星砸到)至少需要多少时间(移动一格的时间为1),如果不可能,则输出-1
  首先呢可以预处理出某个方块被流星砸中的最小时刻,然后bfs,判断是否在这个时刻之前到达这
个方块,如果是安全的,就设成INF。找到了的第一个INF就是答案。
  注意,虽然有时间,但是还是要判重,第一次忘了,然后就TLE。。
 
Code
 /*
* poj.org
* Problem#3669
* Accepted
* Time:266ms
* Memory:620k
*/
#include<iostream>
#include<cstdio>
#include<fstream>
#include<cstring>
#include<queue>
#include<algorithm>
#define INF 0xfffffff
#define smin(a, b) a = min(a, b);
using namespace std;
typedef bool boolean;
template<typename T>
inline void readInteger(T& u){
char x;
while(!isdigit((x = getchar())));
for(u = x - ''; isdigit((x = getchar())); u = (u << ) + (u << ) + x - '');
ungetc(x, stdin);
}
template<typename T>class Matrix{
public:
T *p;
int lines;
int rows;
Matrix():p(NULL){ }
Matrix(int lines, int rows):lines(lines), rows(rows){
p = new T[(lines * rows)];
}
T* operator [](int pos){
return (p + pos * lines);
}
};
int n;
Matrix<boolean> visited;
Matrix<int> down;
inline void init(){
visited = Matrix<boolean>(, );
down = Matrix<int>(, );
fill(down.p, down.p + * , INF);
memset(visited.p, false, sizeof(boolean) * * );
readInteger(n);
for(int i = , a, b, c; i <= n; i++){
readInteger(a);
readInteger(b);
readInteger(c);
smin(down[a][b], c);
if(a - >= ) smin(down[a - ][b], c);
smin(down[a + ][b], c);
if(b - >= ) smin(down[a][b - ], c);
smin(down[a][b + ], c);
}
}
typedef class Point{
public:
int x;
int y;
int step;
Point(const int x = , const int y = , const int step = ):x(x), y(y), step(step){}
}Point;
int result = -;
queue<Point> que;
const int move[][] = {{, -, , }, {, , , -}};
void solve(){
if(down[][] == INF){
result = ;
return;
}
que.push(Point());
visited[][] = true;
while(!que.empty()){
Point e = que.front();
que.pop();
for(int i = ; i < ; i++){
Point eu = Point(e.x + move[][i], e.y + move[][i], e.step + );
if(eu.x >= && eu.y >= && eu.step < down[eu.x][eu.y] && !visited[eu.x][eu.y]){
if(down[eu.x][eu.y] == INF){
result = eu.step;
return;
}
visited[eu.x][eu.y] = true;
que.push(eu);
}
}
}
}
int main(){
init();
solve();
printf("%d", result);
return ;
}

poj Meteor Shower - 搜索的更多相关文章

  1. poj Meteor Shower

    这道题是下流星,流星会下到上下左右中的位置,而且有时间的,要你求出最短到达安全位置的时间. 这道题要注意边界是可以超过300的 #include<stdio.h> #include< ...

  2. POJ 3669 Meteor Shower(流星雨)

    POJ 3669 Meteor Shower(流星雨) Time Limit: 1000MS    Memory Limit: 65536K Description 题目描述 Bessie hears ...

  3. poj 3669 Meteor Shower

                                                                                                      Me ...

  4. POJ 3669 Meteor Shower (BFS+预处理)

    Description Bessie hears that an extraordinary meteor shower is coming; reports say that these meteo ...

  5. 题解报告:poj 3669 Meteor Shower(bfs)

    Description Bessie hears that an extraordinary meteor shower is coming; reports say that these meteo ...

  6. POJ 3669 Meteor Shower BFS求最小时间

    Meteor Shower Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 31358   Accepted: 8064 De ...

  7. poj 3669 Meteor Shower(bfs)

    Description Bessie hears that an extraordinary meteor shower is coming; reports say that these meteo ...

  8. Meteor Shower(POJ 3669)

    Meteor Shower Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 12816   Accepted: 3451 De ...

  9. Meteor Shower POJ - 3669 (bfs+优先队列)

    Meteor Shower Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 26455   Accepted: 6856 De ...

随机推荐

  1. HFTP Guide

    Introduction(说明) HFTP is a Hadoop filesystem implementation that lets you read data from a remote Ha ...

  2. 97.394570112228 - Query OK, 1 row affected (43.05 sec) - the overhead of parsing and network communication

    mysql> create table w0904procedure (wa char, wb char, wd char, wi char); Query OK, rows affected ...

  3. spring中的BeanFactory与ApplicationContext的作用和区别

    BeanFactory 和ApplicationContext Bean 工厂(com.springframework.beans.factory.BeanFactory)是Spring 框架最核心的 ...

  4. PL/SQL常用表达式及举例(二)

    使用LOOP循环 declare v_i number:=1; begin loop dbms_output.put_line('v_i='||v_i); exit when v_i>=3; v ...

  5. PyQt5标准对话框

    很全的Qt的标准对话框,包含QInputDialog.QColorDialog.QFontDialog.QMessageBox.QOpenFileDialog... 全部是由官网的C++版本,转换成P ...

  6. Scala安装配置

    注:下载地址:http://downloads.typesafe.com/scala/2.11.6/scala-2.11.6.tgz?_ga=1.41078626.1125902863.1429259 ...

  7. 【Python】小练习

    1.python爬虫 (1)抓取一个新闻网上含有某一关键字的新闻,http://internasional.kompas.com/就是这个网站上面所有内容含有THAAD这个关键词的新闻 (2)爬取大众 ...

  8. Netty In Action中文版 - 第三章:Netty核心概念

            在这一章我们将讨论Netty的10个核心类.清楚了解他们的结构对使用Netty非常实用.可能有一些不会再工作中用到.可是也有一些非经常常使用也非常核心,你会遇到. Bootstrap ...

  9. 当前数据库普遍使用wait-for graph等待图来进行死锁检测

    当前数据库普遍使用wait-for graph等待图来进行死锁检测 较超时机制,这是一种更主动的死锁检测方式,innodb引擎也采用wait-for graph SQL Server也使用wait-f ...

  10. MongoDB复制集的工作原理介绍(二)

    复制集工作原理 1)数据复制原理 开启复制集后,主节点会在 local 库下生成一个集合叫 oplog.rs,这是一个有限集合,也就是大小是固定的.其中记录的是整个mongod实例一段时间内数据库的所 ...