bzoj 3383: [Usaco2004 Open]Cave Cows 4 洞穴里的牛之四(set+BFS)
2018-03-01 01:33
513 查看
3383: [Usaco2004 Open]Cave Cows 4 洞穴里的牛之四
Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 44 Solved: 26
[Submit][Status][Discuss]
Description
一道竖直的石墙横在贝茜前面,她必须越过去. 石墙可以看成一个xz平面,贝茜开始的时候在(0,0),只要她到达z=T(1≤T≤200000)的位置,就算翻越成功. 墙上有N(1≤N≤50000)块石头突出,成为贝茜的落蹄石.如果两个落蹄石之间z方向和名方向的距离均不超过2,那贝茜就可以之它们之间攀越. 帮助贝茜计算她是否能够翻越石墙,如果可以,最少需要踩多少块落蹄石.Input
第1行输入N和T;接下来N行,每行输入坐标(x,z),表示一个石头的位置.其中x∈[0,10^6],z∈[0,T],(0,0)不会出现.Output
如果可以翻越则输出最少需要的落蹄石数(起点不计入),否则输出-1.Sample Input
5 31 26 34 13 20 2Sample Output
4是一个很简单的最短路,如果从A石头能跳到B石头,那么A到B连一条边
但是石头特别多不能暴力,所以可以每个x竖线上的点用set存一下,广搜时对于能到达的点在set里面查
#include<stdio.h>
#include<algorithm>
#include<string.h>
#include<set>
#include<queue>
using namespace std;
typedef struct Res
{
int x, y, id;
bool operator < (const Res &b) const
{
if(y<b.y)
return 1;
return 0;
}
}Res;
Res s[50005], now, temp;
set<Res> st[1000005];
queue<Res> q;
int dp[50005];
int main(void)
{
int n, h, i, ans;
set<Res>::iterator it;
scanf("%d%d", &n, &h);
for(i=1;i<=n;i++)
{
scanf("%d%d", &s[i].x, &s[i].y);
s[i].id = i;
st[s[i].x].insert(s[i]);
}
memset(dp, 62, sizeof(dp));
dp[0] = 0;
now.x = now.y = now.id = 0;
q.push(now);
while(q.empty()==0)
{
now = q.front();
now.y -= 2;
q.pop();
for(i=max(now.x-2, 0);i<=min(now.x+2, 1000000);i++)
{
for(it = st[i].lower_bound(now);it!=st[i].end() && (*it).y<=now.y+4;it++)
{
temp = *it;
if(dp[now.id]+1<dp[temp.id])
{
dp[temp.id] = dp[now.id]+1;
q.push(temp);
}
}
}
}
ans = 2147483647;
for(i=1;i<=n;i++)
{
if(s[i].y>=h)
ans = min(ans, dp[i]);
}
if(ans<=n)
printf("%d\n", ans);
else
printf("-1\n");
return 0;
}
相关文章推荐
- bzoj 3383: [Usaco2004 Open]Cave Cows 4 洞穴里的牛之四
- BZOJ 3382: [Usaco2004 Open]Cave Cows 3 洞穴里的牛之三
- bzoj 3381: [Usaco2004 Open]Cave Cows 2 洞穴里的牛之二 RMQ
- bzoj 3382: [Usaco2004 Open]Cave Cows 3 洞穴里的牛之三(切比雪夫距离)
- Bzoj 3380: [Usaco2004 Open]Cave Cows 1 洞穴里的牛之一
- bzoj 3381: [Usaco2004 Open]Cave Cows 2 洞穴里的牛之二(RMQ)
- bzoj3382 [Usaco2004 Open]Cave Cows 3 洞穴里的牛之三
- bzoj 3381: [Usaco2004 Open]Cave Cows 2 洞穴里的牛之二
- bzoj 3380: [Usaco2004 Open]Cave Cows 1 洞穴里的牛之一(状压+BFS)
- BZOJ3382: [Usaco2004 Open]Cave Cows 3 洞穴里的牛之三
- 3381: [Usaco2004 Open]Cave Cows 2 洞穴里的牛之二
- 3380: [Usaco2004 Open]Cave Cows 1 洞穴里的牛之一
- bzoj 3379: [Usaco2004 Open]Turning in Homework 交作业
- BZOJ 3403: [Usaco2009 Open]Cow Line 直线上的牛(模拟)
- bzoj3376 [Usaco2004 Open]Cube Stacking 方块游戏
- BZOJ[3378][Usaco2004 Open]MooFest 狂欢节 树状数组
- 【BZOJ】1687: [Usaco2005 Open]Navigating the City 城市交通(bfs)
- BZOJ 3377 [Usaco2004 Open]The Cow Lineup 奶牛序列
- 【BZOJ】3299: [USACO2011 Open]Corn Maze玉米迷宫(bfs)
- [bzoj3378][Usaco2004 Open]MooFest 狂欢节_树状数组