zoukankan      html  css  js  c++  java
  • HDU2066--一个人的旅行

    一个人的旅行
    Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
    Total Submission(s): 13779 Accepted Submission(s): 4623


    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<cstring>
     2 #include<cstdio>
     3 #include<cmath>
     4 #include<iostream>
     5 #include<algorithm>
     6 using namespace std;
     7 
     8 #define INF 9999999
     9 int Start[1001];
    10 int End[1001];
    11 int n,s,d;
    12 int edge[1001][1001];
    13 int dis[1001];
    14 int vis[1001];
    15 
    16 
    17 void dijkstra(int u0)
    18 {
    19     int i,j,k;
    20     for(i=1;i<=1000;i++)
    21     {
    22         dis[i]=edge[u0][i];
    23         vis[i]=0;
    24     }
    25     vis[u0]=1;
    26     dis[u0]=0;
    27     for(i=1;i<1000;i++)
    28     {
    29         int mmin=INF,v=u0;
    30         for(j=1;j<=1000;j++)
    31         {
    32             if(vis[j]!=1&&dis[j]<mmin)
    33             {
    34                 v=j;
    35                 mmin=dis[j];
    36             }
    37         }
    38         vis[v]=1;
    39         for(k=1;k<=1000;k++)
    40         {
    41             if(edge[v][k]!=INF&&dis[v]+edge[v][k]<dis[k]&&!vis[k])
    42             {
    43                 dis[k]=dis[v]+edge[v][k];
    44             }
    45         }
    46     }
    47 }
    48 
    49 int main()
    50 {
    51     while(scanf("%d%d%d",&n,&s,&d)!=EOF)
    52     {
    53         memset(edge,0,sizeof(edge));
    54         int i,j;
    55         for(i=1;i<=1000;i++)
    56         {
    57             for(j=1;j<=1000;j++)
    58             {
    59                 if(i==j)edge[i][j]=0;
    60                 else if(edge[i][j]==0)edge[i][j]=INF;
    61             }
    62         }
    63         for(i=1;i<=n;i++)
    64         {
    65             int u,v,w;
    66             scanf("%d%d%d",&u,&v,&w);
    67             if(w<edge[u][v])
    68             {
    69                 edge[u][v]=edge[v][u]=w;
    70             }
    71         }
    72         for(i=1;i<=s;i++)
    73         {
    74             scanf("%d",&Start[i]);
    75         }
    76         for(i=1;i<=d;i++)
    77         {
    78             scanf("%d",&End[i]);
    79         }
    80         int mmin=INF;
    81         for(i=1;i<=s;i++)
    82         {
    83             dijkstra(Start[i]);
    84             for(j=1;j<=d;j++)
    85             {
    86                 if(mmin>dis[End[j]])
    87                 {
    88                     mmin=dis[End[j]];
    89                 }
    90             }
    91         }
    92         printf("%d
    ",mmin);
    93     }
    94     return 0;
    95 }
    View Code
  • 相关阅读:
    一点关于this的理解
    BFC引发的关于position的思考
    JS HTML标签尺寸距离位置定位计算
    JS获取网页宽高方法集合
    JSDOM之节点
    并发- synchronized,锁
    公共文件下载-结构设计
    订单模块-结构设计
    ES-update
    ES使用笔记
  • 原文地址:https://www.cnblogs.com/zafuacm/p/3213420.html
Copyright © 2011-2022 走看看