zoukankan      html  css  js  c++  java
  • bzoj 1611: [Usaco2008 Feb]Meteor Shower流星雨【BFS】

    t记录每个格子最早被砸的时间,bfs(x,y,t)表示当前状态为(x,y)格子,时间为t。因为bfs,所以先搜到的t一定小于后搜到的,所以一个格子搜一次就行

    #include<iostream>
    #include<cstdio>
    #include<queue>
    using namespace std;
    const int N=505,inf=1e9,dx[]={-1,1,0,0,0},dy[]={0,0,-1,1,0};
    int n,m,t[N][N];
    bool v[N][N];
    struct qwe
    {
    	int x,y,t;
    	qwe(int X=0,int Y=0,int T=0)
    	{
    		x=X,y=Y,t=T;
    	}
    };
    queue<qwe>q;
    int read()
    {
        int r=0,f=1;
        char p=getchar();
        while(p>'9'||p<'0')
        {
            if(p=='-')
                f=-1;
            p=getchar();
        }
        while(p>='0'&&p<='9')
        {
            r=r*10+p-48;
            p=getchar();
        }
        return r*f;
    }
    inline bool ok(int x,int y,int z)
    {
    	return x>=0&&y>=0&&t[x][y]>z&&!v[x][y];
    }
    int main()
    {
        n=read();
    	for(int i=0;i<=500;i++)
    		for(int j=0;j<=500;j++)
    			t[i][j]=inf;
    	for(int i=1;i<=n;i++)
    	{
    		int x=read(),y=read(),z=read();
    		for(int j=0;j<5;j++)
    			if(x+dx[j]>=0&&y+dy[j]>=0)
    				t[x+dx[j]][y+dy[j]]=min(t[x+dx[j]][y+dy[j]],z);
    	}
    	q.push(qwe(0,0,0));
    	v[0][0]=1;
    	while(!q.empty())
    	{
    		int x=q.front().x,y=q.front().y,z=q.front().t;
    		q.pop();
    		if(t[x][y]==inf)
    		{
    			printf("%d
    ",z);
    			return 0;
    		}
    		for(int i=0;i<4;i++)
    			if(ok(x+dx[i],y+dy[i],z+1))
    			{
    				v[x+dx[i]][y+dy[i]]=1;
    				q.push(qwe(x+dx[i],y+dy[i],z+1));
    			}
    	}
    	puts("-1");
        return 0;
    }
    
  • 相关阅读:
    luogu P1613 跑路
    luogu P2047 社交网络
    luogu P2740 [USACO4.2]草地排水Drainage Ditches
    「字典树」最大异或对
    「贪心」耍杂技的牛
    「贪心」士兵
    「贪心」糖果传递
    「几何」[USACO12DEC]疯狂的栅栏Crazy Fences
    「LCA」[USACO10HOL]牛的政治Cow Politics
    「二分答案 + 前缀和」防线
  • 原文地址:https://www.cnblogs.com/lokiii/p/8962721.html
Copyright © 2011-2022 走看看