zoukankan      html  css  js  c++  java
  • POJ 3669 Meteor Shower(bfs)

    bfs就好,取最早的毁坏时间。

    就一组数据,初始化都没有,直接用dist[][]状态判重。

    #include<cstdio>
    #include<iostream>
    #include<string>
    #include<cstring>
    #include<queue>
    #include<vector>
    #include<stack>
    #include<vector>
    #include<map>
    #include<set>
    #include<algorithm>
    using namespace std;
    
    #define PB push_back
    #define MP make_pair
    #define fi first
    #define se second
    #define PS push
    
    #define cer(x) cout<<#x<<'='<<endl
    typedef long long ll;
    const int INF = 0x3f3f3f3f;
    //const int mINF = -1-INF;//0xc0c0c0c0;
    #define REP0(i,n) for(int i = 0; i < n; i++)
    #define REP1(i,n) for(int i = 1; i <= n; i++)
    #define DWN(i,n) for(int i = n; i > 0; i--)
    #define DWN_(i,n) for(int i = n; i >= 0; i--)
    #define REP(i,s,e) for(int i = s; i < e; i++)
    #define REP_(i,s,e) for(int i = s; i <= e; i++)
    #define CLR(a,v) memset(a,v,sizeof(a))
    
    #define para int o = 1, int l = 1,int r = n
    #define lo (o<<1)
    #define ro (o<<1|1)
    #define TEMP int mid = (l+r)>>1;
    #define lsn lo, l, mid
    #define rsn ro, mid+1, r
    #define insd ql<=l&&r<=qr
    
    inline int read()
    {
        int ret; char c; while(c = getchar(),c<'0'||c>'9');
        ret = c-'0';
        while(c = getchar(),c>='0'&&c<='9') ret = ret*10 + c-'0';
        return ret;
    }
    
    inline int reads()
    {
        int ret; char c; while(c = getchar(),c != '-' && c<'0'||c>'9');
        bool Sign = c == '-';
        ret = Sign?0:c-'0';
        while(c = getchar(),c>='0'&&c<='9') ret = ret*10 + c-'0';
        return Sign?-ret:ret;
    }
    
    const int maxn = 305;
    int g[maxn][maxn];
    int d[maxn][maxn];
    const int MxT = 1001;
    typedef pair<int,int> Node;
    
    const int dx[] = {0,0,1,-1}, dy[] = {1,-1,0,0};
    bool valid(int x,int y)
    {
        return x>=0&&x<maxn&&y>=0&&y<maxn;
    }
    int bfs()
    {
        queue<Node>q;
        q.push(Node(0,0));  d[0][0] = 1;
        while(q.size()){
            Node u = q.front(); q.pop();
            if(g[u.fi][u.se] > MxT) return d[u.fi][u.se]-1;
            int step = d[u.fi][u.se];
            for(int k = 0; k < 4; k++){
                int nx = u.fi+dx[k], ny = u.se+dy[k];
                if(valid(nx,ny) &&!d[nx][ny] && step < g[nx][ny]){
                    d[nx][ny] = step+1;
                    q.push(Node(nx,ny));
                }
            }
        }
        return -1;
    }
    
    //#define LOCAL
    int main()
    {
    #ifdef LOCAL
        freopen("in.txt","r",stdin);
    #endif
        int M = read();
        memset(g,0x3f,sizeof(g));
        for(int i = M; i--;){
            int x = read(), y = read();
            int t = read();
            for(int k = 0; k < 4; k++){
                int nx = x+dx[k], ny = y+dy[k];
                if(valid(nx,ny)){
                    g[nx][ny] = min(g[nx][ny],t);
                }
            }
            g[x][y] = min(g[x][y],t);
        }
        printf("%d
    ",bfs());
        return 0;
    }
    //freopen("OutStd.txt","w",stdout);
  • 相关阅读:
    HDU 2888 Check Corners (模板题)【二维RMQ】
    POJ 3264 Balanced Lineup(模板题)【RMQ】
    poj 3368 Frequent values(经典)【RMQ】
    SPOJ RPLN (模板题)(ST算法)【RMQ】
    UVA 796 Critical Links(模板题)(无向图求桥)
    UVA 315 Network (模板题)(无向图求割点)
    POJ 2029 Get Many Persimmon Trees (模板题)【二维树状数组】
    poj 3067 Japan 【树状数组】
    POJ 2481 Cows 【树状数组】
    POJ 1195 Mobile phones【二维树状数组】
  • 原文地址:https://www.cnblogs.com/jerryRey/p/4889590.html
Copyright © 2011-2022 走看看