#iroha2019day2k. [iroha2019_day2_k]虫取り
[iroha2019_day2_k]虫取り
これはインタラクティブな問題である。
この問題は高速な言語で解答することを推奨する。C++14 (GCC 5.4.1) で AC できることが確認されている。
問題文
※きたむーとはこの問題の作問のお手伝いをした人の名前である。また、きたむーの彼女はいろはちゃんではない。
今日は夏休み。きたむーは愛する彼女と虫取りに来ている。実は虫取りは二人の愛を深める非常に有意義な共同作業なのだ!
きたむーは本のりんごの木を見つけた。このりんごの木は 個の根、 個の葉または節点、 本の枝からなり、情報科学で言うところの木構造と酷似している。葉または節点、および根のことを以下では頂点と呼ぶ。根には番号 が、各頂点には番号 が振られている。はじめ、きたむーは根にいる。
このりんごの木からは美味しい果実が取れるので、頂点にはすぬけ虫がやってくる。すぬけ虫は群れで生活していて非常に賢く、ある頂点を根とした部分木の各頂点に分散して止まる。例えば頂点数 の部分木に 匹のすぬけ虫がやってきたとき、 匹ずつに分かれて各頂点に止まる。なお、すぬけ虫は群れの虫の数が頂点数で割り切れないような部分木にはやってこない。なお、最初各頂点に止まっているすぬけ虫は 匹である。
この木は非常に高くそびえており、虫取り網ではとても届かないので、きたむーは頂点間を移動してすぬけ虫を取ることにした。ただし、いちいち木を降りてすぬけ虫の居場所を確認していては時間が勿体ないので、彼女から 回指示を受けて、頂点間を移動することにした。
指示は以下の 種類からなる。
指示 は
という形で与えられる。これは、 番目の頂点を根とする部分木に 匹のすぬけ虫の群れがやってきたことを意味する。
指示 は
という形で与えられる。このとき、きたむーは現在いる頂点から 番目の頂点まで、最短経路で移動する。その際、始点・終点を含む移動中に通った頂点にいたすぬけ虫をすべて捕獲し、その総数を彼女に報告する。その後、きたむーは次の指示 があるまで頂点 にとどまる。
二人の愛を試す虫取りの試練が今始まる・・・。
制約
- 入力はすべて整数
- 入力されるグラフは木である
- は頂点 を根とする部分木の頂点数で割り切れる
部分点
- 以下の入出力例に正解すると 点が得られる。
- すべてのテストケースに正解すると、さらに 点が得られる。
入力
入力は以下の形式で標準入力から与えられる。
ここで、整数 は、 本の枝のうち 番目の枝は頂点 と を結んでいるという意味である。
出力
指示 が与えられるごとに、捕まえたすぬけ虫の総数を報告せよ。
実装上の注意
- この問題は インタラクティブな問題 である。指示 が与えられた後に捕まえたすぬけ虫の数を報告しない限り、次の指示が与えられないので注意せよ。
- 出力のあと、標準出力を flush しなければならない。 そうでないときは
TLE
の可能性がある。 - 答えを出力した後、プログラムをすぐに終了しなければならない。そうでないときの挙動は定義されていない。
- 出力の答えが間違っている場合の挙動は定義されていない (
WA
とは限らない)。
入力例 1
6 4
0 3
3 1
3 2
4 5
0 5
0 3 9
0 1 2
0 2 5
1 1
出力例 1
8
入力例 2
9 9
0 5
0 2
0 1
5 8
5 7
5 4
2 3
2 6
0 0 9
0 2 6
0 8 4
1 8
1 1
0 3 8
0 0 144
0 3 32
1 3
出力例 2
7
1
110
実際には指示 のあとに解答を出力しないと次の指示が与えられないことに注意せよ。