标签:
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 26552 Accepted Submission(s): 9189
#include<stdio.h>
#include<string.h>
#define INF 99999999
__int64 map[10005][10005],ivs[10005],dis[10005];
__int64 s[10005],d[10005],D;
__int64 Dis(__int64 n,__int64 m)
{
__int64 i,j,min,p,q=INF;
for(i=1; i<=m; i++)
dis[i]=map[n][i];
ivs[n]=1;
for(i=1; i<=m; i++)
{
min=INF;
for(j=1; j<=m; j++)
if(!ivs[j]&&min>dis[j])
{
p=j;
min=dis[j];
}
ivs[p]=1;
for(j=1; j<=m; j++)
{
if(!ivs[j]&&dis[p]+map[p][j]<dis[j])
dis[j]=dis[p]+map[p][j];
}
}
for(i=1; i<=D; i++)
{
if(q>dis[d[i]])
q=dis[d[i]];
}
return q;
}
int main()
{
__int64 T,S,i,j,a,b,c,n,m,k,min,max;
while(scanf("%I64d%I64d%I64d",&T,&S,&D)!=EOF)
{
for(i=1; i<=1000; i++)
for(j=1; j<=1000; j++)
map[i][j]=INF;
min=INF;
max=0;
for(i=1; i<=T; i++)
{
scanf("%I64d%I64d%I64d",&a,&b,&c);
if(map[a][b]>c)
map[a][b]=c;
if(map[b][a]>c)
map[b][a]=c;
if(max<a)
max=a;
if(max<b)
max=b;
}
for(i=1; i<=S; i++)
scanf("%I64d",&s[i]);
for(i=1; i<=D; i++)
{
scanf("%I64d",&d[i]);
if(max<d[i])
max=d[i];
}
for(i=1; i<=S; i++)
{
memset(ivs,0,sizeof(ivs));
k=Dis(s[i],max);
if(min>k)
min=k;
}
printf("%I64d\n",min);
}
return 0;
}
标签:
原文地址:http://www.cnblogs.com/-lgh/p/4957772.html