题意:n个点,任意两个点之间有一个危险指数,给定一个顺序ai,要求从点1到点n的路径中按照顺序经过点ai(不一定相邻),求最少的危险指数和
floyd裸题
floyd求出任意两点间的最短路,然后按照1->a1->a2->...->am->n的顺序求一下两点间最短路累加即可
var
n,m :longint;
ans :int64;
map :array[0..110,0..110] of longint;
a :array[0..10010] of longint;
i,j :longint;
procedure floyd;
var
i,j,k:longint;
begin
for k:=1 to n do
for i:=1 to n do
for j:=1 to n do
if (i<>j) and (i<>k) and (k<>j) then
if map[i,k]+map[k,j]<map[i,j] then map[i,j]:=map[i,k]+map[k,j];
end;
begin
read(n,m);
for i:=1 to m do read(a[i]);
for i:=1 to n do
for j:=1 to n do read(map[i,j]);
floyd;
ans:=0;
a[0]:=1; a[m+1]:=n;
for i:=0 to m do inc(ans,int64(map[a[i],a[i+1]]));
writeln(ans);
end.
——by Eirlys