zoukankan      html  css  js  c++  java
  • HDU 1874 畅通工程续

    最短路~

    #include <cstdio>
    #include <cstring>
    #include <utility> 
    #include <queue> 
    using namespace std;  
    const int N=20005;  
    const int INF=9999999;  
    typedef pair<int,int>seg;  
    priority_queue<seg,vector<seg>,greater<seg> >q;     
    int begin,end,d[N],head[N],u[N],v[N],w[N],next[N],n,m,a,b,c; 
    bool vis[N];  
    void build(){  
        memset(head,-1,sizeof(head)); 
        for(int e=1;e<=m;e++){  
            scanf("%d%d%d",&u[e],&v[e],&w[e]);  
            u[e+m]=v[e]; v[e+m]=u[e]; w[e+m]=w[e];  
            next[e]=head[u[e]]; head[u[e]]=e;  
            next[e+m]=head[u[e+m]]; head[u[e+m]]=e+m;  
        }  
    }     
    void Dijkstra(int src){  
        memset(vis,0,sizeof(vis));  
        for(int i=0;i<=n;i++) d[i]=INF;  
        d[src]=0;  
        q.push(make_pair(d[src],src));  
        while(!q.empty()){  
            seg now=q.top(); q.pop();  
            int x=now.second;  
            if(vis[x]) continue; vis[x]=true;  
            for(int e=head[x];e!=-1;e=next[e]) 
            if(d[v[e]]>d[x]+w[e]){  
                d[v[e]]=d[x]+w[e];  
                q.push(make_pair(d[v[e]],v[e]));  
            }   
        }  
    }      
    int main(){  
        while(~scanf("%d%d",&n,&m)){
            build();
            scanf("%d%d",&begin,&end);
            if(begin==end){puts("0");continue;}
            Dijkstra(begin);
            if(d[end]==INF)puts("-1");
            else printf("%d
    ",d[end]);
        }  
        return 0;  
    }
    
  • 相关阅读:
    计算几何
    差三角
    约瑟夫
    字符编码
    河南省赛之Substring
    移动字母
    抽屉原理
    不要为了完成代码而写代码
    分布式文件系统优化
    降低代码的复杂度
  • 原文地址:https://www.cnblogs.com/forever97/p/3619076.html
Copyright © 2011-2022 走看看