zoukankan      html  css  js  c++  java
  • hdu

    http://acm.hdu.edu.cn/showproblem.php?pid=2066

    把与草儿相连的城市最短距离置为0,然后进行dijkstra,在t个城市里找出距离最近的一个即可。

     1 #include <iostream>
     2 #include <vector>
     3 #include <queue>
     4 #include <cstdio>
     5 using namespace std;
     6 
     7 const int maxn = 1010;
     8 const int INF = 1<<29;
     9 struct edge {
    10     int to,cost;
    11     edge(){}
    12     edge( int x,int y ) {
    13         to=x;
    14         cost=y;
    15     }
    16 };
    17 
    18 typedef pair<int,int>P;
    19 vector<edge>G[maxn];
    20 int d[maxn],s[maxn],e[maxn];
    21 int T,S,D,n;
    22 
    23 void dijkstra() {
    24     priority_queue<P,vector<P>,greater<P> >que;
    25     for(int i=1;i<=n;i++) d[i]=INF;
    26     for(int i=1;i<=S;i++)
    27     {
    28         d[s[i]]=0;
    29         que.push(P(0,s[i]));
    30     }
    31     while(!que.empty()) {
    32         P p=que.top(); que.pop();
    33         int v=p.second;
    34         if(d[v]<p.first) continue;
    35         for(int i=0;i<G[v].size();i++) {
    36             edge e=G[v][i];
    37             if(d[e.to]>d[v]+e.cost) {
    38                 d[e.to]=d[v]+e.cost;
    39                 que.push(P(d[e.to],e.to));
    40             }
    41         }
    42     }
    43 }
    44 
    45 int main()
    46 {
    47     //freopen("a.txt","r",stdin);
    48     while(~scanf("%d%d%d",&T,&S,&D))
    49     {
    50         for(int i=1;i<=maxn;i++) G[i].clear();
    51         n=0;
    52         int a,b,c,v;
    53         for(int i=1;i<=T;i++)
    54         {
    55             scanf("%d%d%d",&a,&b,&c);
    56          //   printf("%d %d %d
    ",a,b,c);
    57             G[a].push_back(edge(b,c));
    58             G[b].push_back(edge(a,c));
    59             if(a>n) n=a;
    60             if(b>n) n=b;
    61         }
    62         for(int i=1;i<=S;i++) scanf("%d",&s[i]);
    63         for(int i=1;i<=D;i++) scanf("%d",&e[i]);
    64         dijkstra();
    65         int ans=INF;
    66         for(int i=1;i<=D;i++)
    67             if(d[e[i]]<ans) ans=d[e[i]];
    68         printf("%d
    ",ans);
    69 
    70     }
    71     return 0;
    72 }
  • 相关阅读:
    自定义组件要加@click方法
    绑定样式
    647. Palindromic Substrings
    215. Kth Largest Element in an Array
    448. Find All Numbers Disappeared in an Array
    287. Find the Duplicate Number
    283. Move Zeroes
    234. Palindrome Linked List
    202. Happy Number
    217. Contains Duplicate
  • 原文地址:https://www.cnblogs.com/nowandforever/p/4566128.html
Copyright © 2011-2022 走看看