#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)
最新推荐文章于 2019-04-16 11:21:00 发布