什么情况?
by chenyewei_1234 @ 2018-02-02 19:09:51
```pascal
var b:array[1..100,1..100] of boolean;
a:array[1..100] of longint;
f:array[1..100,1..100] of longint;
d,e:array[1..100] of boolean;
u,v,dd,n,k,m,s,t,i,j,min,p:longint;
function opo(l:longint):boolean;
var i:longint;
begin
for i:=1 to k do
if not(e[i]) and (b[a[l],i]) then
exit(false);
exit(true);
end;
procedure dfs(kk,tot:longint);
var j:longint;
begin
if kk=t then
begin
if tot<min then min:=tot;
exit;
end;
if tot>=min then exit;
for j:=1 to n do
if (f[kk,j]>0) and (d[a[j]]) and (opo(j)) then
begin
d[a[j]]:=false;
e[a[j]]:=false;
dfs(j,tot+f[kk,j]);
e[a[j]]:=true;
d[a[j]]:=true;
end;
end;
begin
fillchar(d,sizeof(d),true);
fillchar(e,sizeof(e),true);
min:=maxlongint;
readln(n,k,m,s,t);
for i:=1 to n do read(a[i]);
readln;
for i:=1 to k do
for j:=1 to k do
begin
read(p);
if p=1 then b[i,j]:=true;
end;
for i:=1 to m do
begin
read(u,v,dd);
f[u,v]:=dd;f[v,u]:=dd;
end;
d[a[s]]:=false;e[a[s]]:=false;
dfs(s,0);
if min=maxlongint then writeln(-1)
else writeln(min);
end.
```
by chenyewei_1234 @ 2018-02-02 19:12:57
有10这个点的测试数据吗?
by peanut_biu @ 2018-02-27 09:09:48
好像是要反着搜?(就是把头和尾调换?)
by hjwbwcy @ 2018-03-11 17:47:51