Module: 動的グラフ プログラミング


Problem

5 /7


DAGへのショートカット

Theory Click to read/hide

動的計画法を使用したソリューションでは、ダイナミクスを計算する順序が重要です (現在の値が依存する値が前に計算されている必要があります)。
したがって、有向非巡回グラフで動的プログラミングを使用する必要がある場合は、最初にグラフのトポロジカル ソートを構築する必要があります。次に、構築されたトポロジー ソートの順序で頂点をソートしてダイナミクスを計算します (問題に応じて、走査順序はソースからシンクへ、またはその逆になります)。
 
 

Problem

有向加重非巡回グラフが与えられます。その中で最短経路を見つける必要があります
頂点 s から頂点 t へ

入力:
入力ファイルの最初の行には、4 つの整数 n、m、s、および t が含まれます。それぞれ、頂点の数、グラフのエッジ、最初と最後の頂点の数です (1 <= n <= 100000; 0 <= m <= 200000; 1 < ;= s, t <= n).
次の m 行には、エッジの説明が 1 行に 1 つずつ含まれています。 
エッジ番号 i は、3 つの整数 bi、ei および wi で表されます - それぞれエッジの開始、終了、および長さ ( 1 <= b i, ei <= n;|wi| <= 1000). 
グラフにはサイクルとループが含まれていません。

出力:
出力ファイルの最初の行には、単一の整数 (s から t への最短パスの長さ) が含まれている必要があります。 
s から t へのパスがない場合は、"Unreachable" と出力します。

例:
  <本体>
入力 出力
2 1 1 2
1 2 -10
-10
2 1 2 1
1 2 -10
到達不能