zoukankan      html  css  js  c++  java
  • [HDOJ2066]一个人的旅行

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2066

     

    一个人的旅行

    Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
    Total Submission(s): 25398    Accepted Submission(s): 8812


    Problem Description
    虽然草儿是个路痴(就是在杭电待了一年多,居然还会在校园里迷路的人,汗~),但是草儿仍然很喜欢旅行,因为在旅途中 会遇见很多人(白马王子,^0^),很多事,还能丰富自己的阅历,还可以看美丽的风景……草儿想去很多地方,她想要去东京铁塔看夜景,去威尼斯看电影,去阳明山上看海芋,去纽约纯粹看雪景,去巴黎喝咖啡写信,去北京探望孟姜女……眼看寒假就快到了,这么一大段时间,可不能浪费啊,一定要给自己好好的放个假,可是也不能荒废了训练啊,所以草儿决定在要在最短的时间去一个自己想去的地方!因为草儿的家在一个小镇上,没有火车经过,所以她只能去邻近的城市坐火车(好可怜啊~)。
     
    Input
    输入数据有多组,每组的第一行是三个整数T,S和D,表示有T条路,和草儿家相邻的城市的有S个,草儿想去的地方有D个;
    接着有T行,每行有三个整数a,b,time,表示a,b城市之间的车程是time小时;(1=<(a,b)<=1000;a,b 之间可能有多条路)
    接着的第T+1行有S个数,表示和草儿家相连的城市;
    接着的第T+2行有D个数,表示草儿想去地方。
     
    Output
    输出草儿能去某个喜欢的城市的最短时间。
     
    Sample Input
    6 2 3 1 3 5 1 4 7 2 8 12 3 8 4 4 9 12 9 10 2 1 2 8 9 10
     
    Sample Output
    9
     
     
     
    Dijkstra水过
     
     
     1 #include <cstdio>
     2 #include <cstdlib>
     3 #include <cstring>
     4 #include <algorithm>
     5 #include <iostream>
     6 #include <cmath>
     7 #include <queue>
     8 #include <stack>
     9 #include <list>
    10 #include <vector>
    11 
    12 using namespace std;
    13 
    14 const int INF = 0x7f7f7f7f;
    15 const int maxn = 1010;
    16 
    17 int G[maxn][maxn];
    18 int dd[maxn];
    19 bool b[maxn];
    20 int n, m, tmp;
    21 int a[maxn], s[maxn];
    22 
    23 void diskstra() {
    24     memset(b, 0, sizeof(b));
    25     b[0] = 1;
    26     int id, mmin;
    27     int i, t;
    28     t = tmp;
    29     for(i = 0; i <= tmp; i++) {
    30         dd[i] = G[0][i];
    31     }
    32     while(t--) {
    33         mmin = INF;
    34         for(i = 1; i <= tmp; i++)
    35             if(!b[i] && dd[i] < mmin) {
    36                 mmin = dd[i];
    37                 id = i;
    38             }
    39             b[id]  = 1;
    40             for(int i = 1; i <= tmp; i++) {
    41                if(!b[i] && dd[i] > dd[id] + G[id][i]) {
    42                    dd[i] = dd[id] + G[id][i];
    43                }
    44             }
    45     }
    46 }
    47 
    48 int main()
    49 {
    50     // freopen("in", "r", stdin);
    51     int u, v, w, k;
    52     while(scanf("%d %d %d", &m, &n, &k) != EOF) {
    53         int ans = INF;
    54         tmp = 0;
    55         for(int i = 0; i < maxn; i++) {            
    56             for(int j = 0; j < maxn; j++) {
    57                 G[i][j] =  INF;
    58             }
    59         }
    60         for(int i = 0; i < m; i++) {
    61             scanf("%d %d %d", &u, &v, &w);
    62             if(u > tmp) {
    63                 tmp = u;
    64             }
    65             if(v > tmp) {
    66                 tmp=v;
    67             }
    68             G[u][v] = G[u][v] > w ? w : G[u][v];
    69             G[v][u] = G[u][v];
    70         }
    71         for(int i = 0; i < n; i++) {
    72             scanf("%d", &a[i]);
    73             G[0][a[i]] = 0;
    74             G[a[i]][0] = 0;
    75         }
    76         for(int i = 0; i < k; i++) {
    77             scanf("%d", &s[i]);
    78         }
    79         diskstra();
    80         for(int j = 0; j < k; j++) {
    81             if(dd[s[j]] < ans) {
    82                 ans=dd[s[j]];
    83             }
    84         }
    85         printf("%d
    ", ans);
    86     }
    87     return 0;
    88 }
     
  • 相关阅读:
    linux消息队列相关操作
    linux下删除3分钟之前指定文件夹下的指定类型文件
    centos6.5安装gmime-2.6
    centos6.5安装filezilla
    posix 正则库程序
    nginx正向vs反向代理
    AbstractQueuedSynchronizer 原理分析
    JAVA NIO详解
    java NIO原理及实例
    Thread类详解
  • 原文地址:https://www.cnblogs.com/kirai/p/4761485.html
Copyright © 2011-2022 走看看