Pagini recente » Cod sursa (job #3290349) | Cod sursa (job #2775938) | Cod sursa (job #2138549) | Cod sursa (job #388484) | Cod sursa (job #584370)
Cod sursa(job #584370)
var a:array[1..30000] of longint;
b:array[0..120000] of longint;
buf:array[1..1000000] of char;
o:array[0..17] of longint;
n,m,k,i,j:longint;
L:int64;
bo:boolean;
f,g:text;
procedure verificare;
var i:longint; x:int64;
begin
x:=0;
for i:=1 to k+1 do
x:=x+b[(o[i]-1)*n+o[i+1]];
if x<L then L:=x;
end;
procedure sw(var a,b:longint);
var t:longint;
begin
t:=a; a:=b; b:=t;
end;
procedure perm(p:longint);
var i:longint;
begin
if p>k then verificare else
begin
for i:=p to k do
begin
sw(o[i+1],o[p+1]);
perm(p+1);
sw(o[i],o[p+1]);
end;
end;
end;
begin
assign(f,'ubuntzei.in');
assign(g,'ubuntzei.out');
reset(f);
rewrite(g);
settextbuf(f,buf);
readln(f,n,m);
read(f,k);
o[1]:=1;
o[k+2]:=n;
for i:=2 to k+1 do
read(f,o[i]);
for i:=1 to m do
readln(f,a[(i-1)*3+1],a[(i-1)*3+2],a[(i-1)*3+3]);
for i:=1 to k+1 do
for j:=1 to n do
b[(i-1)*n+j]:=-1;
for i:=1 to k+1 do
begin
b[(i-1)*n+o[i]]:=0;
bo:=true;
while bo do
begin
bo:=false;
for j:=1 to m do
begin
if ((b[(i-1)*n+a[(j-1)*3+1]]>-1)and((b[(i-1)*n+a[(j-1)*3+2]]=-1)or(b[(i-1)*n+a[(j-1)*3+2]]>b[(i-1)*n+a[(j-1)*3+1]]+a[(j-1)*3+3]))) then
begin
b[(i-1)*n+a[(j-1)*3+2]]:=b[(i-1)*n+a[(j-1)*3+1]]+a[(j-1)*3+3];
bo:=true;
end;
if ((b[(i-1)*n+a[(j-1)*3+2]]>-1)and((b[(i-1)*n+a[(j-1)*3+1]]=-1)or(b[(i-1)*n+a[(j-1)*3+1]]>b[(i-1)*n+a[(j-1)*3+2]]+a[(j-1)*3+3]))) then
begin
b[(i-1)*n+a[(j-1)*3+1]]:=b[(i-1)*n+a[(j-1)*3+2]]+a[(j-1)*3+3];
bo:=true;
end;
end;
end;
end;
L:=2000000000;
perm(1);
writeln(g,L);
close(g);
end.