AT_wupc2019_f RPG

Description

[problemUrl]: https://atcoder.jp/contests/wupc2019/tasks/wupc2019_f カトーくんは、とあるRPGのシナリオを作っています。 このRPGでは \\(N\\) 個の場面があり、各場面は既に「戦闘」か「空き地」のどちらかであると決まっています。 また、 \\(M\\) 個の場面間をつなぐ移動通路があり、\\(i\\) 番目の通路は、場面 \\(a\_i\\) から 場面 \\(b\_i\\) へ移動が可能です。 最初、RPGの主人公であるシンヤくんは、場面 \\(1\\) にいて、自由に通路を移動し、場面 \\(N\\) に到達したらゲームクリアです。 シンヤくんには「元気」と「疲労」の2種類の状態があります。 「元気」状態では戦闘に挑むことができますが、「疲労」状態では戦闘することができません。 「疲労」状態で「戦闘」場面に到達するとゲームオーバーとなります。 シンヤくんは「元気」状態でゲームを開始します。 「戦闘」場面を通過すると、疲れて「疲労」状態になります。 「疲労」状態から「元気」状態に戻るためには「回復所」を通過する必要があります。 「回復所」は任意の「空き地」場面に設置することができます。 場面 \\(i \\ (2 \\leq i \\leq N-1)\\) に回復所を設置するコストは \\(c\_i\\) です。 現在、「回復所」をどこに設置するかは決まっていません。 そこでカトーくんは、以下の条件を満たすように、「回復所」を設置することにしました。 - 場面 \\(1\\) から動き始めたシンヤくんが場面 \\(N\\)に向かう**どのような移動を選んでも**、任意の「戦闘」場面から他の「戦闘」場面に達する間に、少なくとも1回は「回復所」を通過する。 - ゲームクリア時のシンヤくんの状態は「疲労」でも「元気」でもよい。 以上の条件を満たすようにカトーくんが「回復所」を設置する際に必要なコストの合計の最小値を求めてください。 どのように「回復所」を設置しても条件を満たすことができなければ、 `-1` を出力してください。

Input Format

入力は以下の形式で標準入力から与えられる。 ``` \(N\) \(M\) \(c_2\) \(c_3\) \(\dots\) \(c_{N-1}\) \(a_1\) \(b_1\) \(a_2\) \(b_2\) \(\vdots\) \(a_M\) \(b_M\) ```

Output Format

条件を満たすような「回復所」の設置コストの合計の最小値を出力してください。 条件を満たすことができない場合は、 `-1` を出力してください。

Explanation/Hint

### 制約 - \\(3 \\leq N \\leq 500\\) - \\(N-1 \\leq M \\leq 1000\\) - \\(-1 \\leq c\_i \\leq 10^9 \\ (2 \\leq i \\leq N-1)\\) - \\(c\_i = -1\\) ならば、場面 \\(i\\) は「戦闘」場面である。 - \\(c\_i \\geq 0\\)ならば、場面 \\(i\\) は「空き地」場面であり、そこに「休憩所」を設置するコストは \\(c\_i\\) である。 - \\(1 \\leq a\_i , b\_i \\leq N \\ (1 \\leq i \\leq M)\\) - 場面 \\(a\_i\\) から、場面 \\(b\_i\\) への移動通路があることを示す。 - \\(N\\) 頂点 \\(M\\) 辺の有向グラフとみたとき、全ての頂点に対し、頂点 \\(1\\) からのパスと、頂点 \\(N\\) へ向かうパスが存在する。また、閉路は存在しない。 - 入力される値はすべて整数である。 ### Sample Explanation 1 場面 \\\\(3\\\\) と場面 \\\\(5\\\\) を選ぶのが最適です。 ### Sample Explanation 2 場面 \\\\(2\\\\) から場面 \\\\(3\\\\) の間に「休憩所」を設置することができません。