View Code
1
#include
"
stdio.h
"
2 #include " math.h "
3 #include " string.h "
4 #define maxn 0x7ffffff
5
6 int map[ 1001 ][ 1001 ],s,t,n,m;
7 int alls;
8 int dist[ 1001 ];
9
10 void dij()
11 {
12 int visit[ 1001 ],i,j,k,minn;
13 for (i = 0 ;i <= n;i ++ )
14 {
15 visit[i] = 0 ;
16 dist[i] = map[s][i];
17 }
18
19 visit[s] = 1 ;
20 for (i = 1 ;i <= n;i ++ )
21 {
22 j = s;
23 minn = maxn;
24 for (k = 0 ;k <= n;k ++ )
25 {
26 if ( ! visit[k] && dist[k] < minn)
27 {
28 minn = dist[k];
29 j = k;
30 }
31 }
32 visit[j] = 1 ;
33 for (k = 0 ;k <= n;k ++ )
34 {
35 if ( ! visit[k] && dist[k] > map[j][k] + dist[j] && map[j][k] < maxn)
36 {
37 dist[k] = map[j][k] + dist[j];
38 }
39 }
40 }
41 }
42
43 int main()
44 {
45 int i,j,k,city,a,b,c,link[ 1001 ],home,gold;
46
47 while (scanf( " %d%d%d " , & m, & home, & gold) != EOF)
48 {
49 for (i = 0 ;i <= 1000 ;i ++ )
50 {
51 for (j = 0 ;j <= 1000 ;j ++ )
52 {
53 map[i][j] = maxn;
54 }
55 }
56 n = 1000 ;
57 for (i = 1 ;i <= m;i ++ )
58 {
59 scanf( " %d%d%d " , & a, & b, & c);
60 if (map[a][b] > c)
61 {
62 map[a][b] = c;
63 map[b][a] = c;
64 if (n < a)n = a;
65 if (n < b)n = b;
66 }
67
68
69 }
70 s = 0 ,t = n;
71 for (i = 1 ;i <= home;i ++ ) // 设置0为超级原点
72 {
73 scanf( " %d " , & c);
74 map[ 0 ][c] = 0 ;
75 }
76 dij();
77 c = maxn;
78 for (i = 1 ;i <= gold;i ++ )
79 {
80 scanf( " %d " , & a);
81 c = c > dist[a] ? dist[a]:c;
82 }
83 printf( " %d\n " ,c);
84 }
85 return 0 ;
86 }
2 #include " math.h "
3 #include " string.h "
4 #define maxn 0x7ffffff
5
6 int map[ 1001 ][ 1001 ],s,t,n,m;
7 int alls;
8 int dist[ 1001 ];
9
10 void dij()
11 {
12 int visit[ 1001 ],i,j,k,minn;
13 for (i = 0 ;i <= n;i ++ )
14 {
15 visit[i] = 0 ;
16 dist[i] = map[s][i];
17 }
18
19 visit[s] = 1 ;
20 for (i = 1 ;i <= n;i ++ )
21 {
22 j = s;
23 minn = maxn;
24 for (k = 0 ;k <= n;k ++ )
25 {
26 if ( ! visit[k] && dist[k] < minn)
27 {
28 minn = dist[k];
29 j = k;
30 }
31 }
32 visit[j] = 1 ;
33 for (k = 0 ;k <= n;k ++ )
34 {
35 if ( ! visit[k] && dist[k] > map[j][k] + dist[j] && map[j][k] < maxn)
36 {
37 dist[k] = map[j][k] + dist[j];
38 }
39 }
40 }
41 }
42
43 int main()
44 {
45 int i,j,k,city,a,b,c,link[ 1001 ],home,gold;
46
47 while (scanf( " %d%d%d " , & m, & home, & gold) != EOF)
48 {
49 for (i = 0 ;i <= 1000 ;i ++ )
50 {
51 for (j = 0 ;j <= 1000 ;j ++ )
52 {
53 map[i][j] = maxn;
54 }
55 }
56 n = 1000 ;
57 for (i = 1 ;i <= m;i ++ )
58 {
59 scanf( " %d%d%d " , & a, & b, & c);
60 if (map[a][b] > c)
61 {
62 map[a][b] = c;
63 map[b][a] = c;
64 if (n < a)n = a;
65 if (n < b)n = b;
66 }
67
68
69 }
70 s = 0 ,t = n;
71 for (i = 1 ;i <= home;i ++ ) // 设置0为超级原点
72 {
73 scanf( " %d " , & c);
74 map[ 0 ][c] = 0 ;
75 }
76 dij();
77 c = maxn;
78 for (i = 1 ;i <= gold;i ++ )
79 {
80 scanf( " %d " , & a);
81 c = c > dist[a] ? dist[a]:c;
82 }
83 printf( " %d\n " ,c);
84 }
85 return 0 ;
86 }