码迷,mamicode.com
首页 > 其他好文 > 详细

HUD 2066 一个人的旅行

时间:2017-10-09 00:40:26      阅读:161      评论:0      收藏:0      [点我收藏+]

标签:const   memset   std   span   pac   space   set   logs   dijkstra   

题意:中文题→ _→ 

注意a,b 之间可能有多条路,一发wa就是因为没注意到

题解:没什么好说的,就是裸的最短路,dijkstra搞定

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 const int inf=0x3f3f3f3f;
 4 int mm[1010][1010];
 5 int vis[1010],dis[1010];
 6 int t,s,d;
 7 int maxn;
 8 void init()
 9 {
10     memset(mm,0x3f,sizeof(mm));
11     memset(dis,0x3f,sizeof(dis));
12     memset(vis,0,sizeof(vis));
13 }
14 void dijkstra(int s)
15 {
16     dis[s]=0;
17     int minn,pos;
18     for(int i=0;i<=maxn;i++)
19     {
20         minn=inf;
21         for(int j=0;j<=maxn;j++)
22         {
23             if(!vis[j]&&dis[j]<minn)
24             {
25                 minn=dis[j];
26                 pos=j;
27             }
28         }
29         vis[pos]=1;
30         for(int j=0;j<=maxn;j++)
31         {
32             if(dis[pos]+mm[pos][j]<dis[j])
33                 dis[j]=dis[pos]+mm[pos][j];
34         }
35     }
36 }
37 int main()
38 {
39     while(~scanf("%d%d%d",&t,&s,&d))
40     {
41         init();
42         int a,b,c;
43         maxn=0;
44         while(t--)
45         {
46             scanf("%d%d%d",&a,&b,&c);
47             maxn=max(maxn,max(a,b));
48             if(c<mm[a][b])
49                 mm[a][b]=mm[b][a]=c;
50         }
51         while(s--)
52         {
53             scanf("%d",&b);
54             mm[0][b]=mm[b][0]=0;
55         }
56         dijkstra(0);
57         int ans=inf;
58         while(d--)
59         {
60             scanf("%d",&c);
61             ans=min(ans,dis[c]);
62         }
63         printf("%d\n",ans);
64     }
65 }

 

HUD 2066 一个人的旅行

标签:const   memset   std   span   pac   space   set   logs   dijkstra   

原文地址:http://www.cnblogs.com/kearon/p/7639090.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!