记录编号 | 39349 | 评测结果 | AAAAAAAAAAAA | ||
---|---|---|---|---|---|
题目名称 | 聪明的推销员 | 最终得分 | 100 | ||
用户昵称 | 是否通过 | 通过 | |||
代码语言 | Pascal | 运行时间 | 0.057 s | ||
提交时间 | 2012-07-09 15:12:00 | 内存使用 | 34.59 MiB | ||
program salenet; var n,i,j,k,l,index,top,ans,head,tail:longint; time,low,dfn,fa,stack,q:array[1..3000] of longint; link:array[1..3000,0..3000] of longint; indgree:array[1..3000] of longint; instack,visit:array[1..3000] of boolean; can:boolean; procedure CalSCC(u:longint); var i:longint; begin inc(index); dfn[u]:=index; low[u]:=index; inc(top); stack[top]:=u; instack[u]:=true; for i:=1 to link[u,0] do begin if dfn[link[u,i]]=0 then begin CalSCC(link[u,i]); if low[link[u,i]]<low[u] then low[u]:=low[link[u,i]]; end else if instack[link[u,i]] and (dfn[link[u,i]]<low[u]) then low[u]:=dfn[link[u,i]]; end; if low[u]=dfn[u] then repeat k:=stack[top]; instack[k]:=false; fa[k]:=u; if time[u]>time[k] then time[u]:=time[k]; dec(top); until k=u; end; begin // OpenFile assign(input,'salenet.in'); reset(input); assign(output,'salenet.out'); rewrite(output); // Input readln(n); for i:=1 to n do time[i]:=maxlongint; readln(l); for tail:=1 to l do begin readln(k,time[k]); q[tail]:=k; visit[k]:=true; end; readln(l); for k:=1 to l do begin readln(i,j); inc(link[i,0]); link[i,link[i,0]]:=j; end; // Judge head:=0; repeat inc(head); for i:=1 to link[q[head],0] do if not visit[link[q[head],i]] then begin visit[link[q[head],i]]:=true; inc(tail); q[tail]:=link[q[head],i]; end; until head=tail; for i:=1 to n do if not visit[i] then begin writeln('NO');writeln(i); // Halt close(input); close(output); Halt; end; // CalSCC for i:=1 to n do if dfn[i]=0 then CalSCC(i); // CalIndgree for i:=1 to n do for j:=1 to link[i,0] do if fa[i]<>fa[link[i,j]] then inc(indgree[fa[link[i,j]]]); // CalAns for i:=1 to n do if (fa[i]=i) and (indgree[i]=0) then inc(ans,time[i]); // Print writeln('YES'); writeln(ans); // CloseFile close(input);close(output); end.