問題一覧 > 通常問題

No.2295 Union Path Query (Medium)

レベル : / 実行時間制限 : 1ケース 4.000秒 / メモリ制限 : 512 MB / 標準ジャッジ問題
タグ : / 解いたユーザー数 23
作問者 : t98slider / テスター : akakimidori
1 ProblemId : 9156 / 出題時の順位表 / 自分の提出
問題文最終更新日: 2023-05-11 02:56:41

問題文

NN 頂点 00 辺の重み付き無向グラフ GG と 変数 XX があります。グラフの頂点にはそれぞれ 00 から N1N-1 までの番号付けがされています。
変数 XX ははじめ X0 X_{0} で初期化されています。
グラフ GG における2頂点間 uu, vv の距離 dist(u,v){\rm dist} (u, v) を次のように定義します。
dist(u,v)=頂点 u から頂点 v へのパスに含まれる辺すべての重みの最大値の最小値 {\rm dist} (u, v) = 頂点\ u\ から頂点\ v\ へのパスに含まれる辺すべての重みの最大値の最小値 同一頂点での距離は dist(v,v)=0{\rm dist}(v, v) = 0 とします。
以下のような QQ 個のクエリが与えられるので、グラフ GG と変数 XX に対して順に処理してください。

  • 1 v w:頂点 vv と頂点 XX を重み ww の辺で結ぶ。入力順について ww が広義単調増加となっていることが保証される。
  • 2 u v:頂点 uu と頂点 vv が連結でない場合-1を出力する。連結である場合、dist(u,v){\rm dist} (u, v) を出力し、 XXdist(u,v){\rm dist} (u, v) を加算する。
    その後、XXNN で割ったあまりとする。
  • 3 v:頂点 vv と同一の連結成分に含まれるすべての頂点対についての距離の総和を 998244353998244353 で割ったあまりを出力する。
    すなわち、頂点 vv と連結である頂点 (頂点 vv も含む)が KK 個あるとし、それぞれ u=(u1,u2,u3,,uK) u = (u_{1}, u_{2}, u_{3}, \cdots, u_{K}) とした際の (i=2Kj=1i1dist(ui,uj))mod 998244353 \left( \sum_{i=2}^{K}\sum_{j=1}^{i-1} {\rm dist}(u_{i}, u_{j}) \right) \bmod\ 998244353 を出力する。頂点 vv と連結である頂点が 11 つしかない (頂点 vv のみである) 場合、0 を出力する。
  • 4 valueXX に値 value{\rm value} を加算する。その後、XXNN で割ったあまりとする。

入力

N X0 QN\ X_{0}\ Q
Query1{\rm Query}_{1}
Query2{\rm Query}_{2}
Query3{\rm Query}_{3}
    \ \ \ \ \vdots
Queryi{\rm Query}_{i}
    \ \ \ \ \vdots
QueryQ{\rm Query}_{Q}

  • 1N2×1051 \leq N \leq 2 \times 10^{5}
  • 1Q3×1051 \leq Q \leq 3 \times 10^{5}
  • 0X0<N0 \leq X_{0} < N
  • Queryi{\rm Query}_{i}について

    タイプ1のクエリのとき
    1 vi wi1\ v_{i}\ w_{i}
    タイプ2のクエリのとき
    2 ui vi2\ u_{i}\ v_{i}
    タイプ3のクエリのとき
    3 vi3\ v_{i}
    タイプ4のクエリのとき
    4 valuei4\ {\rm value}_{i}
    0ui,vi,valuei<N0 \leq u_{i}, v_{i}, {\rm value}_{i} < N
    0wi1090 \leq w_{i} \leq 10^{9}
    i<ji < j のとき wiwjw_{i} \leq w_{j} を満たす。

  • 入力はすべて整数

出力

タイプ2、タイプ3のクエリが合計で KK 個与えられるとして、 i (1iK)i\ (1 \leq i \leq K) 行目にそれぞれのクエリの回答を1行に出力してください。最後に改行してください。

サンプル

サンプル1
入力
5 1 10
1 0 1
2 0 1
1 1 2
2 0 2
3 1
2 4 1
1 1 4
4 1
1 4 4
3 1
出力
1
2
5
-1
17

サンプル1の説明を見る (クリックで展開します)

初期状態は NN 頂点 00 辺となっていて変数は X=1X = 1 に初期化されています。
  • 1 0 1:1つ目のクエリでは、頂点 00 と頂点 X=1X = 1 を重み 11 の辺で結びます。(b)
  • 2 0 1:2つ目のクエリでは、dist(0,1)=1{\rm dist}(0, 1) = 1 を出力します。これにより変数は X=1+1=2X = 1 + 1 = 2 となります。(c)
  • 1 1 2:3つ目のクエリでは、頂点 11 と頂点 X=2X = 2 を重み 22 の辺で結びます。(d)
  • 2 0 2:4つ目のクエリでは、dist(0,2)=2{\rm dist}(0, 2) = 2 を出力します。これにより変数は X=2+2=4X = 2 + 2 = 4 となります。(e)
  • 3 1:5つ目のクエリでは、頂点 11 と同じ連結成分に属する頂点対の距離の総和を出力します。(e)
    dist(0,1)=1{\rm dist}(0, 1) = 1dist(0,2)=2{\rm dist}(0, 2) = 2dist(1,2)=2{\rm dist}(1, 2) = 2 なのでこれらの総和である 55 を出力します。
  • 2 4 1:6つ目のクエリでは、dist(4,1){\rm dist}(4, 1) の出力が求められますが、非連結なため 1-1 を出力します。(e)
  • 1 1 4:7つ目のクエリでは、頂点 11 と頂点 X=4X = 4 を重み 44 の辺で結びます。(f)
  • 4 1:8つ目のクエリでは、変数 XX11 を加算し、NN で割ったあまりとします。X=(4+1)mod5=0 X = (4 + 1) \bmod 5 = 0 となります。(g)
  • 1 4 4:9つ目のクエリでは、頂点 44 と頂点 X=0X = 0 を重み 44 の辺で結びます。(h)
  • 3 1:10個目のクエリでは、頂点 11 と同じ連結成分に属する頂点対の距離の総和を出力します。(h)
    dist(0,1)=1{\rm dist}(0, 1) = 1dist(0,2)=2{\rm dist}(0, 2) = 2dist(0,4)=4{\rm dist}(0, 4) = 4dist(1,2)=2{\rm dist}(1, 2) = 2dist(1,4)=4{\rm dist}(1, 4) = 4dist(2,4)=4{\rm dist}(2, 4) = 4なので 1717 を出力します。

サンプル2
入力
10 2 12
1 0 14
2 0 2
1 2 22
1 1 28
1 7 94
2 4 6
3 8
1 5 126
1 3 212
1 6 223
1 9 245
3 6
出力
14
-1
0
4135

サンプル3
入力
4 2 11
1 3 91
1 0 111
2 1 0
3 2
2 0 1
1 1 210
1 2 230
3 1
2 3 3
2 0 3
2 1 2
出力
-1
313
-1
943
0
111
210

提出するには、Twitter 、GitHub、 Googleもしくは右上の雲マークをクリックしてアカウントを作成してください。