#include <algorithm>
#include <climits>
#include <iostream>
#include <memory.h>
#include <string.h>
#include <vector>
using namespace std;
#define N 0x3f3f3f
int map[1500][1500], vis[1500], dis[1500], m, n, a[1500], b[1500];
void dj(int v) {
int k, i, j;
memset(vis, 0, sizeof(vis));
for (int i = 0; i <= 1300; i++) {
dis[i] = map[v][i];
}
vis[v] = 1;
for (int i = 0; i <= 1300; i++) {
int min = N;
for (j = 0; j <= 1300; j++) {
if (!vis[j] && dis[j] < min) {
k = j;
min = dis[j];
}
}
vis[k] = 1;
for (j = 0; j <= 1000; j++) {
if (dis[j] > dis[k] + map[k][j]) {
dis[j] = dis[k] + map[k][j];
}
}
}
}
int main() {
int t, x, y, z, i, j;
while (scanf("%d%d%d", &t, &m, &n) != EOF) {
for (int i = 0; i <= 1300; i++) {
for (int j = 0; j <= 1300; j++) {
map[i][j] = N;
}
}
for (int i = 1; i <= t; i++) {
cin >> x >> y >> z;
if (map[x][y] > z)
map[x][y] = map[y][x] = z;
}
for (int i = 1; i <= m; i++) {
cin >> a[i];
}
for (int i = 1; i <= n; i++) {
cin >> b[i];
}
int ans = N;
for (int i = 1; i <= m; i++) {
dj(a[i]);
for (int j = 1; j <= n; j++) {
ans = min(ans, dis[b[j]]);
}
}
cout << ans << endl;
}
return 0;
}
杭电OJ 2066 一个人的旅行 C++
最新推荐文章于 2024-09-22 21:28:15 发布