#include <iostream>
using namespace std;
#include <cmath>
#include <algorithm>
#define maxint 10000000
int a[1005][1005],dist[1005],n,c[1005],d[1005],s[1005];
void dj(int k)
{
int i,j,t,newint;
for(i=1;i<=n;i++)
{
dist[i]=a[k][i];
s[i]=0;
}
dist[k]=0;s[k]=1;
for(i=1;i<n;i++)
{
t=maxint;
for(j=1;j<=n;j++)
if(!s[j]&&dist[j]<t) t=dist[j],k=j;
s[k]=1;
for(j=1;j<=n;j++)
if(!s[j]&&a[k][j]<maxint)
{
newint=dist[k]+a[k][j];
if(dist[j]>newint) dist[j]=newint;
}
}
}
int main()
{
int m,mm,i,j,k,dd,ma,nn;
while(cin>>nn>>m>>mm)
{
ma=maxint;n=0;
for(i=1;i<=1004;i++)
for(j=1;j<=1004;j++)
a[i][j]=maxint;
for(k=0;k<nn;k++)
{
cin>>i>>j>>dd;
if(i>n) n=i;if(j>n) n=j;
if(dd<a[i][j]) a[i][j]=a[j][i]=dd;
}
for(i=0;i<m;i++)
cin>>c[i];
for(i=0;i<mm;i++)
cin>>d[i];
for(i=0;i<m;i++)
{
dj(c[i]);
for(j=0;j<mm;j++)
if(s[d[j]]==1) {if(ma>dist[d[j]]) ma=dist[d[j]];}
}
cout<<ma<<endl;
}
return 0;
}
hdu 2066最短路径(Dijkstra算法)
最新推荐文章于 2021-09-30 14:42:49 发布