Tyvj P2079(Spfa)
2012-12-02 12:31
232 查看
From tangjz Normal (OI) | |||||||||
---|---|---|---|---|---|---|---|---|---|
|
Program defence; const maxn=90000; maxm=500000; inf=2139062143; type dis_arr=record s:longint; d:array[1..maxn] of longint; end; var n,m,i,j:longint; w:array[1..maxn] of longint; head,edge,next,weight:array[1..maxm] of longint; size:longint; d1,d2:dis_arr; queue:array[1..6000000] of longint; Procedure addedge(u,v,w:longint); begin inc(size); edge[size]:=v; weight[size]:=w; next[size]:=head[u]; head[u]:=size; end; Procedure addedge_main; var u,v,w:longint; begin read(u,v,w); addedge(u,v,w);addedge(v,u,w); end; Procedure spfa(var d:dis_arr); var i,j,now,p:longint; begin i:=1;j:=1;queue[1]:=d.s; fillchar(d.d,sizeof(d.d),127);d.d[d.s]:=0; while (i<=j) do begin now:=queue[i]; p:=head[now]; while (p<>0) do begin if (d.d[now]+weight[p]<d.d[edge[p]]) then begin inc(j); queue[j]:=edge[p]; d.d[edge[p]]:=d.d[now]+weight[p]; end; p:=next[p]; end; inc(i); end; end; Procedure print; var i,j:longint; ans:int64; flag:boolean; begin flag:=false; ans:=0; for i:=2 to n-1 do begin if d1.d[i]<>inf then ans:=ans+int64(w[i]+d1.d[i]); if (d1.d[i]>d2.d[i]) then begin if not(flag) then begin flag:=true; writeln('No'); end else write(' '); write(i); end; end; if not(flag) then begin writeln('Yes'); writeln(ans); end else writeln; end; begin // assign(input,'defence.in'); // reset(input); fillchar(head,sizeof(head),0); fillchar(edge,sizeof(edge),0); fillchar(next,sizeof(next),0); size:=0; read(n,m); d1.s:=1;d2.s:=n; for i:=2 to n-1 do read(w[i]); for i:=1 to m do begin addedge_main; end; spfa(d1);spfa(d2); print; end.
相关文章推荐
- tyvj:1520 树的直径 spfa/树的直径
- tyvj1031热浪——初学spfa
- TYVJ-1106 SPFA
- 分糖果_ssl2339_tyvj1083_spfa
- 【TYVJ】1467 - 通向聚会的道路(spfa+特殊的技巧)
- 【BZOJ3450】Tyvj1952 Easy【期望DP】
- Dijkstra TYVJ 1031热浪 Dijkstra测试数据
- [POJ 3662] Telephone Lines (二分答案+SPFA)
- Tyvj_P1003
- 【codevs2492】【Tyvj1941】上帝造题的七分钟2,线段树的特别技巧
- 最短路spfa dijkstra模板
- Tyvj_P1014
- Codeforces Beta Round #95 (Div. 2) D. Subway 边双联通+spfa
- Codeforces Round #349 (Div. 2) A B C[dp] D[spfa] +vector
- Floyd、Dijkstra、Bellman-Ford、SPFA的比较
- 【Tyvj】P1002 谁拿了最多奖学金【某下午刷水题系列】
- 洛谷 P1352 TYVJ P1052 CODEVS 1380 没有上司的舞会
- HDU——2066一个人的旅行(优先队列SPFA水题)
- Codeforces Round #355 (Div. 2) A B C D vector + map spfa
- POJ 1511 Invitation Cards【来回最短路+SPFA】