震惊!第十个点1008ms!发生了什么?

P1078 [NOIP2012 普及组] 文化之旅

什么情况?
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


|