#include <iostream>
#include <stdio.h>
#define inf 999999
using namespace std;
int my_map[1010][1010];
int dist[1010];
int s[1010];
void dij(int n,int v)
{
int i,j,dir,min;
for(i=0;i<=n;i++)
{
s[i]=0;
dist[i]=my_map[v][i];
}
s[v]=1;
dist[v]=0;
for(i=0;i<=n;i++)
{
min=inf;
for(j=0;j<=n;j++)
if(s[j]==0&&min>dist[j])
{
dir=j;
min=dist[j];
}
if(min==inf) break;
s[dir]=1;
for(j=0;j<=n;j++)
if(s[j]==0&&dist[j]>dist[dir]+my_map[dir][j])
dist[j]=dist[dir]+my_map[dir][j];
}
}
int main()
{
int n,m,s,p,q,t,i,j,w,a;
while(scanf("%d%d%d",&n,&m,&s)!=EOF)
{
for(i=0;i<=n;i++)
for(j=0;j<=n;j++)
my_map[i][j]=inf;
for(i=1;i<=m;i++)
{
scanf("%d%d%d",&p,&q,&t);
if(t<my_map[p][q])
my_map[p][q]=t;
}
scanf("%d",&w);
for(i=1;i<=w;i++)
{
scanf("%d",&a);//如不这样处理会超时
my_map[0][a]=0;
}
dij(n,0);
if(dist[s]==inf)
printf("-1\n");
else
printf("%d\n",dist[s]);
}
return 0;
}
hdu2680最短路
最新推荐文章于 2021-08-06 22:37:56 发布