HUD 2066 一个人的旅行
Posted Kearon
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HUD 2066 一个人的旅行相关的知识,希望对你有一定的参考价值。
题意:中文题→ _→
注意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 一个人的旅行的主要内容,如果未能解决你的问题,请参考以下文章