55 lines
1.4 KiB
ObjectPascal
55 lines
1.4 KiB
ObjectPascal
program LJ;
|
|
var n,p,c,i,j,x,y,min,head,tail,tot,u:longint;
|
|
dis,b,num:array[1..800]of longint;
|
|
w:array[1..800,1..800]of longint;
|
|
team:array[1..1605] of longint;
|
|
a:array[1..800,0..800]of longint;
|
|
exist:array[1..800] of boolean;
|
|
begin
|
|
assign(input,'butter.in');reset(input);
|
|
assign(output,'butter.out');rewrite(output);
|
|
readln(n,p,c);
|
|
for i:=1 to n do readln(b[i]);
|
|
for i:=1 to p do
|
|
for j:=1 to p do
|
|
w[i,j]:=maxlongint div 3;
|
|
for i:=1 to c do
|
|
begin
|
|
readln(x,y,w[x,y]);
|
|
inc(num[x]);
|
|
a[x,num[x]]:=y;
|
|
inc(num[y]);
|
|
a[y,num[y]]:=x;
|
|
w[y,x]:=w[x,y];
|
|
end;
|
|
min:=maxlongint;
|
|
for i:=1 to p do
|
|
begin
|
|
for j:=1 to p do dis[j]:=maxlongint div 3;
|
|
fillchar(team,sizeof(team),0);
|
|
fillchar(exist,sizeof(exist),false);
|
|
dis[i]:=0;team[1]:=i;head:=0;tail:=1; exist[i]:=true;
|
|
repeat
|
|
inc(head);
|
|
head:=((head-1) mod 1601)+1;
|
|
u:=team[head]; exist[u]:=false;
|
|
for j:=1 to num[u] do
|
|
if dis[a[u,j]]>dis[u]+w[u,a[u,j]] then
|
|
begin
|
|
dis[a[u,j]]:=dis[u]+w[u,a[u,j]];
|
|
if exist[ a[u,j] ]=false then
|
|
begin
|
|
inc(tail); tail:=((tail-1) mod 1601)+1;
|
|
team[tail]:=a[u,j];
|
|
exist[ a[u,j] ]:=true;
|
|
end;
|
|
end;
|
|
until head=tail;
|
|
tot:=0;
|
|
for j:=1 to n do tot:=tot+dis[b[j]];
|
|
if tot<min then min:=tot;
|
|
end;
|
|
writeln(min);
|
|
close(input);close(output);
|
|
end.
|