難易度評価

難易度を1〜10段階で評価できます。投票はあとから変更・取り消しできます。

難易度(投票) 未投票 (0票)

投票の分布

まだ投票はありません。

  1. Lv.10票
  2. Lv.20票
  3. Lv.30票
  4. Lv.40票
  5. Lv.50票
  6. Lv.60票
  7. Lv.70票
  8. Lv.80票
  9. Lv.90票
  10. Lv.100票

難易度の目安を見る ↗

ログインして難易度を投票

外部サイトへ移動します

リンク先の URL を確認してから開いてください。

別タブで開く

Shortest Balanced Walk

作成者 webp

難易度(作成者設定) Lv.5

難易度(投票) 未投票 (0票)

実行時間制限
3 秒
メモリ制限
512 MiB

問題文

頂点に 11 から NN までの番号がついた NN 頂点 MM 辺の単純連結無向グラフが与えられます。 ii 番目の辺は頂点 uiu_i と頂点 viv_i を結んでいて、ラベル cic_i が付与されています。 ここで、 cic_i は ( または ) です。

頂点 11 を始点、頂点 NN を終点とするウォークのうち、通過した辺のラベルを通過順に並べた文字列が正しいかっこ列であるようなものを、 良いウォーク と呼びます。

良いウォークが存在するか判定してください。

存在する場合は、良いウォークの長さとしてありえる値の最小値を求めてください。

ウォークとは

グラフ上の経路のうち、同じ頂点や同じ辺を複数回通っても良いものです。また、通った辺の数をウォークの長さと言います。

正しいかっこ列とは

文字列中に部分文字列として含まれる () を 00 回以上繰り返し削除することで、空文字列にできる文字列です。

制約

  • 2≤N≤2002 \leq N \leq 200
  • N−1≤M≤min⁡(N(N−1)2,200)N-1 \leq M \leq \min \Big( \frac{N(N-1)}{2}, 200 \Big)
  • N,MN, M は整数
  • 1≤ui<vi≤N1 \leq u_i < v_i \leq N
  • ui,viu_i, v_i は整数
  • cic_i は ( または )
  • 与えられるグラフは単純連結無向グラフ

入力

入力は以下の形式で標準入力から与えられる。

NMN \quad M u1v1c1u_1 \quad v_1 \quad c_1 u2v2c2u_2 \quad v_2 \quad c_2 ⋮\vdots uMvMcMu_M \quad v_M \quad c_M

出力

良いウォークが存在する場合は、その長さとしてあり得る値の最小値を出力してください。

存在しない場合は、 -1 を出力してください。

サンプル 1

入力

6 6
1 2 (
1 3 )
2 3 )
3 4 (
3 5 )
5 6 )

出力

6

頂点を 1→2→3→4→3→5→61 \to 2 \to 3 \to 4 \to 3 \to 5 \to 6 の順にたどるウォークは、通過した辺のラベルを辺の通過順に並べると ()(()) になるため、良いウォークです。長さが 66 未満の良いウォークは存在しないため、 66 が答えです。

ウォークでは同じ頂点や同じ辺を複数回通っても良いことに注意してください。

サンプル 2

入力

6 6
1 2 (
1 3 )
2 3 )
3 4 )
3 5 (
4 6 (

出力

-1

良いウォークは存在しません。

サンプル 3

入力

6 5
1 2 (
1 3 )
3 4 )
4 5 )
5 6 )

出力

8