http://acm.hdu.edu.cn/showproblem.php?pid=2066
这道题用floyd做的时候要稍微优化,不优化就会超时。
1 #include <cstdio> 2 #include <iostream> 3 #include <cstring> 4 #include <algorithm> 5 #define maxn 1001 6 using namespace std; 7 8 const int inf=1<<28; 9 10 int g[maxn][maxn]; 11 int a,b,t,max1; 12 int s1[maxn]; 13 int d1[maxn]; 14 15 void floyd() 16 { 17 for(int k=1; k<=max1; k++) 18 { 19 for(int i=1; i<=max1; i++) 20 { 21 if(g[i][k]==inf) continue; 22 for(int j=1; j<=max1; j++) 23 { 24 if(g[i][j]>g[i][k]+g[k][j]) 25 g[i][j]=g[i][k]+g[k][j]; 26 } 27 } 28 } 29 } 30 31 int main() 32 { 33 int T,s,d; 34 while(cin>>T>>s>>d) 35 { 36 for(int i=0; i<=maxn; i++) 37 { 38 for(int j=0; j<=maxn; j++) 39 { 40 if(i==j) g[i][j]=0; 41 else g[i][j]=inf; 42 } 43 } 44 max1=-1; 45 for(int i=0; i<T; i++) 46 { 47 scanf("%d%d%d",&a,&b,&t); 48 if(g[a][b]>t) g[a][b]=g[b][a]=t; 49 max1=max(max1,a); 50 max1=max(max1,b); 51 } 52 floyd(); 53 for(int i=0; i<s; i++) 54 { 55 scanf("%d",&s1[i]); 56 } 57 for(int j=0; j<d; j++) 58 { 59 scanf("%d",&d1[j]); 60 } 61 int min2=99999999; 62 for(int i=0; i<s; i++) 63 { 64 for(int j=0; j<d; j++) 65 { 66 min2=min(min2,g[s1[i]][d1[j]]); 67 } 68 } 69 printf("%d\n",min2); 70 } 71 return 0; 72 }
hdu 2066 一个人的旅行,布布扣,bubuko.com
原文:http://www.cnblogs.com/fanminghui/p/3679300.html