1. 程式人生 > >HUD 2066 一個人的旅行

HUD 2066 一個人的旅行

memset pac while std style bit color pos jks

題意:中文題→ _→

註意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 一個人的旅行