#include <stdio.h> #include <stdlib.h> int dis[1001][1001]; int adj[1001]; int want[1001]; int main() { int t, s, d; int i, j, k; int a, b, c; int max, temp_max; while (EOF != scanf("%d %d %d", &t, &s, &d)) { max = -1; for (i = 1; i <= 1000; i++) { for (j = 1; j <= 1000; j++) { if (i == j) dis[i][j] = 0; else dis[i][j] = INT_MAX; } } for (i = 1; i <= t; i++) { scanf("%d %d %d", &a, &b, &c); temp_max = a > b ? a : b; max = max > temp_max ? max : temp_max; if (dis[a][b] > c) { dis[a][b] = c; dis[b][a] = c; } } for (i = 1; i <= s; i++) scanf("%d", &adj[i]); for (i = 1; i <= d; i++) scanf("%d", &want[i]); // floyd for (i = 1; i <= max; i++) { for (k = 1; k <= max; k++) { if (dis[i][k] != INT_MAX) { for (j = 1; j <= max; j++) { if (dis[k][j] != INT_MAX && dis[i][j] > dis[i][k] + dis[k][j]) { dis[i][j] = dis[i][k] + dis[k][j]; } } } } } max = INT_MAX; for (i = 1; i <= s; i++) { for (j = 1; j <= d; j++) { if (max > dis[adj[i]][want[j]]) { max = dis[adj[i]][want[j]]; } } } printf("%d\n", max); } return 0; }
hduoj_2066(floyd)
猜你喜欢
转载自blog.csdn.net/qq_32862515/article/details/80639507
今日推荐
周排行