12/25 PKU
1986 Distance Queries
木が与えられる。2頂点間の距離を求めるクエリをK個オフライン処理せよ。
Tarjan を使って最小共通先祖を各クエリに対して求める。すると、根からの距離をdepth[p] と置くとdist(p, q) = depth[p] + depth[q] - 2depth[LCA(p, q)]で求まる。
Spaghetti Sourceを読むとLCAは線形で解けるようなことが書いてあるんですがどうするんでしょうか。ちなみにTarjanはunion findを定数とみなすなら線形のようです。
3402 Add a queen
盤面にいくつかクイーンが置かれている。まだ置かれていないある1マスにクイーンを置く。このとき、クイーンによって攻撃されないマスの数が最大になるようにクイーンを置くが、そのとき置く場所を求めよ。複数ある場合は、辞書順最小のものを求めよ。
基本的にはやるだけだが、「辞書順最小」なので、(r, w)のpairを作って比較するとWAになる。(a1 < a10 < a11 < … < a2 < a20 < …)