• HDU 2680 Choose the best route


    题解:由于是多个起点和单个终点,所以反向构图,那么就是多个终点和单个起点了,于是直接最短路。

    #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,k; 
    bool vis[N];  
    void build(){  
        memset(head,-1,sizeof(head)); 
        for(int e=1;e<=m;e++){  
            scanf("%d%d%d",&v[e],&u[e],&w[e]);  
            next[e]=head[u[e]]; head[u[e]]=e;  
        }  
    }     
    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%d",&n,&m,&begin)){
            build(); int min=INF;
            scanf("%d",&k);
            Dijkstra(begin);
            for(int i=0;i<k;i++){
                scanf("%d",&end);
                min=d[end]<min?d[end]:min;
            }
            if(min==INF)puts("-1");
            else printf("%d
    ",min);
        }  
        return 0;  
    }
    
  • 相关阅读:
    DOM节点的删除(jQuery)
    DOM节点的插入(jQuery)
    DOM节点创建(jQuery)
    jQuery的属性及样式
    jQuery选择器
    jQuery对象及DOM对象
    给大家分享一个很好用的屏幕共享小软件
    Web单浏览器登录
    Winform制作圆弧panel
    Winform 无边框窗口移动自定义边框粗细颜色
  • 原文地址:https://www.cnblogs.com/forever97/p/3619101.html
Copyright © 2020-2023  润新知