#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;
#define N 999999999
int n,s,t;
int map[1002][1002];
int start[1002];
int ens[1002];
int d[1002];
int vis[1002];
int dd[1002];
int dis(int st)
{
memset(vis,0,sizeof(vis));
vis[st] = 1;
int point;
int min = N;
for(int i=1;i<=1000;i++) d[i] = min;
for(int i=1;i<=1000;i++)
if(map[st][i]) dd[i] = map[st][i];
else dd[i] = min;
dd[st] = 0;d[st] = 0;
for(int i=1;i<=1000;i++)
{
min = N;
for(int j=1;j<=1000;j++)
if(vis[j]==0 && dd[j] <=min) {
point = j; min = dd[j] ;
}
d[point]=min;vis[point]=1;
for(int j=1;j<=1000;j++)
if(vis[j]==0 && map[point][j])
if(map[point][j]+d[point]<dd[j])
{
dd[j] = map[point][j] + d[point];
//pre[j] = point;
}
}
min = N;
for(int i=0;i<t;i++)
if(d[ens[i]]<min) min = d[ens[i]];
return min;
}
void init()
{
while(scanf("%d%d%d",&n,&s,&t)!=EOF)
{
memset(map,0,sizeof(map));
for(int i=0;i<n;i++)
{
int a,b,time;
scanf("%d%d%d",&a,&b,&time);
if(map[a][b]==0||map[a][b]>time)
{
map[a][b] = time;
map[b][a] = time;
}
}
for(int i=0;i<s;i++)
scanf("%d",&start[i]);
for(int i=0;i<t;i++)
scanf("%d",&ens[i]);
int min = 0x7fffffff;
for(int i=0;i<s;i++)
{
int d = dis(start[i]);
if(d<min) min = d;
}
printf("%d\n",min);
}
}
int main()
{
init();
return 0;
}
hdu 2066
最新推荐文章于 2022-05-16 14:41:23 发布