• 一个人的旅行 dij(),评测的时候有点惨


    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
    ***************************************************************************************************************************
     1 #include<iostream>
     2 #include<string>
     3 #include<cstring>
     4 #include<cmath>
     5 #include<algorithm>
     6 #include<cstdio>
     7 using namespace std;
     8 const int inf=1<<29;
     9 int dis[1111];
    10 int map[1111][1111];
    11 int T,D,S,n;
    12 int src[1111],love[1111];
    13 bool vis[1111];
    14 int i,j,k;
    15 void bellman(int s)
    16 {
    17     int it,jt,gs;
    18     int minn;
    19     for(it=1;it<=1050;it++)
    20      {
    21          dis[it]=map[s][it];
    22          //cout<<"dis:: "<<dis[it]<<endl;
    23      }
    24 
    25      vis[s]=true;
    26      dis[s]=0;
    27     for(it=1;it<1050;it++)
    28     {
    29         minn=inf;
    30         for(jt=1;jt<=1050;jt++)
    31         {
    32             if(!vis[jt]&&dis[jt]<minn)
    33             {
    34                 minn=dis[jt];
    35                 gs=jt;
    36             }
    37         }
    38         vis[gs]=true;
    39         if(minn==inf)break;
    40         for(jt=1;jt<=1050;jt++)
    41         {
    42             if(!vis[jt]&&dis[jt]>map[gs][jt]+dis[gs]&&map[gs][jt]!=inf)
    43               dis[jt]=dis[gs]+map[gs][jt];
    44             //cout<<"dis:: "<<dis[jt]<<endl;
    45         }
    46     }
    47 }
    48 int main()
    49 {
    50     int a,b,time;
    51     while(~scanf("%d%d%d",&T,&S,&D))
    52     {
    53         n=0;
    54         for(i=0;i<=1050;i++)
    55          for(j=0;j<=1050;j++)
    56           map[i][j]=inf;
    57         for(i=0;i<=1050;i++)
    58          map[i][i]=0;
    59         for(i=1;i<=T;i++)
    60         {
    61             scanf("%d%d%d",&a,&b,&time);
    62             if(map[a][b]>time)
    63              map[a][b]=map[b][a]=time;
    64             //if(a>n)n=a;
    65             //if(b>n)n=b;
    66         }
    67         for(i=1;i<=S;i++)
    68          scanf("%d",&src[i]);
    69         for(i=1;i<=D;i++)
    70          scanf("%d",&love[i]);
    71          int mintime=inf;
    72         for(i=1;i<=S;i++)
    73         {
    74             memset(vis,false,sizeof(vis));
    75             bellman(src[i]);
    76             for(j=1;j<=D;j++)
    77             {
    78                 //cout<<"dis:: "<<dis[love[j]]<<endl;
    79                 if(dis[love[j]]<mintime)
    80                   mintime=dis[love[j]];
    81             }
    82         }
    83         printf("%d
    ",mintime);
    84     }
    85     return 0;
    86 }
    View Code
  • 相关阅读:
    网页动画
    浮动
    定位
    盒子模型
    表单
    2017年07月05号课堂笔记
    2017年07月07号课堂笔记
    2017年07月03号课堂笔记
    2017年06月30号课堂笔记
    2017年06月28号课堂笔记
  • 原文地址:https://www.cnblogs.com/sdau--codeants/p/3428383.html
Copyright © 2020-2023  润新知