zoukankan      html  css  js  c++  java
  • bzoj 2259: [Oibh]新型计算机 最短路 建模

    Code:

    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #include<queue>
    using namespace std;
    #define maxn 3000005
    int head[maxn], to[maxn], nex[maxn], val[maxn],edges,s,t,pre[maxn],nxt[maxn];
    struct Node{
        int dist,u;
        Node(int dist=0,int u=0):dist(dist),u(u){}
        bool operator <(Node a) const{
            return a.dist<dist;
        }
    };
    priority_queue<Node>Q;
    void addedge(int u,int v,int c){
        nex[++edges]=head[u],head[u]=edges,to[edges]=v,val[edges]=c;
    }
    int d[maxn];
    bool done[maxn];
    void dijkstra(){
        memset(d,0x3f,sizeof(d));
        d[s]=0;
        Q.push(Node(0,s));
        while(!Q.empty()){
            int u=Q.top().u; Q.pop();
            if(done[u]) continue;
            if(u==t) break;
            done[u]=true;
            for(int v=head[u];v;v=nex[v])
                if(d[u]+val[v] < d[to[v]]){
                    d[to[v]]=d[u]+val[v];
                    Q.push(Node(d[to[v]],to[v]));
                }
        }
    }
    int main(){
        //freopen("input.in","r",stdin);
        int n,a;
        scanf("%d",&n);
        s=1, t=n+1;
        for(int i=1;i<=n;++i){
            scanf("%d",&a);
            for(int j=i+1;j<=min(n+1,a+i+1)&&!pre[j];++j) addedge(j,j-1,1), pre[j]=1;
            for(int j=i+a+1;j<=n&&!nxt[j];++j) addedge(j,j+1,1),nxt[j]=1;
            if(i+a<=n) addedge(i,i+a+1,0);
            else addedge(i,n+1,i+a-n);
        }
        dijkstra();
        printf("%d",d[t]);
        return 0;
    }
    

      

  • 相关阅读:
    Python标准库之csv(1)
    python3:csv的读写
    Python os模块方法
    Python闭包
    Python修饰器
    Python生成器
    Python迭代器
    Python文件对象方法
    Justep X5 Studio,业界公认第一的快速开发平台
    马云:早九晚五的工作方式在2013-2015年就是慢性自杀
  • 原文地址:https://www.cnblogs.com/guangheli/p/9922600.html
Copyright © 2011-2022 走看看