#include <iostream>
#include <cstdio>
const int N=10000;
using namespace std;
int a[1005][1005],b[1005],bz[1005],lj[1005],xq[1005],ma;
int djik(int s)
{
int i,j,k,mi;
for(i=1;i<=ma;i++)
{
b[i]=a[s][i]; bz[i]=0;
}
bz[s]=1; b[s]=0;
for(i=1;i<ma;i++)
{
for(mi=N,k=j=1;j<=ma;j++)
if(bz[j]==0&&b[j]<mi) mi=b[j],k=j;
bz[k]=1;
for(j=1;j<=ma;j++)
if(bz[j]==0&&a[k][j]<N)
{
int d=b[k]+a[k][j];
if(d<b[j]) b[j]=d;
}
}
}
int main()
{
int m,m1,i,j,c,cc,x,y,d,n;
while(cin>>n>>m>>m1)
{ memset(a,1,sizeof(a));
for(ma=1,i=1;i<=n;i++)
{scanf("%d%d%d",&x,&y,&d);
if(d<a[x][y]) a[x][y]=a[y][x]=d; //陷阱二:重边问题
if(x>ma) ma=x; //陷阱一:n不是最大的顶点
if(y>ma) ma=y;
}
for(i=1;i<=m;i++)
scanf("%d",&lj[i]);
for(i=1;i<=m1;i++)
scanf("%d",&xq[i]);
for(cc=N,i=1;i<=m;i++)
{
djik(lj[i]);
for(j=1;j<=m1;j++)
if(bz[xq[j]]&&b[xq[j]]<cc) cc=b[xq[j]];
}
printf("%d\n",cc);
}
return 0;
}
hdu 2066 最短路径Dijkstra算法
最新推荐文章于 2022-12-14 13:01:59 发布