IJPC-2 D問題解説

Y
D 鉄道会社
@takayuta1999
問題概要
 𝑁頂点からなる重み付き木AとBが与えられる
 どちらも、1~𝑁の頂点がある
 異なる二頂点の組であって、どちらの木においてもpath
上の最大重みが等しくなるような組の数を求めよ。
解法
 path上の最大重みを求めるときにO(loglog)にする一般
的なテクを思い出す
 Union Find に小さい辺から入れていってつないでいけ
ばよさそう?
解法-part 1
 与えられた木を短い順に辺を加えていって、UFでrootど
うしをつなげて得られる木に組み替える
(同じ長さの辺は適当な順番で加えていく)
 そうするとどのような性質が見られるだろうか
Sample-1 A社
1
2 3
45
5
3
1
3
これを
Sample-1 A社
1
3
1
こうして
2
5
3
1
4
3
1
2
5
3
1→ →
→
最後にこれを加えると…
Sample-1 A社
こうじゃ
2
5
3
1
4
35
3
1
Sample-1 A社
諸事情により各頂点に対して、子に向
かって降りる辺を長さでソートする
2
5
3
1
4
3
5
3
1
例を見る
 このUFで組み替えた木の性質を見る
 一つ、pathの最大重みはLCAの右側の長さなり
 二つ、辺はそれを斬って分割される木の内、根を含まな
い方の木に含まれるいかなる辺以上の長さをもつ
 三つ、どの頂点においても、その頂点から子に向かって
出る辺は右に行くほど長くなる(長さが同じことも)
 四つ、この木の高さはO(logN)である
証明っぽいコメント
 一つ、二つはUnion Find でつなげる過程を見れば示せ
る
 三つ、はこうなるようにソートしたからそうでなきゃだめ
 四つ、はUnion Find で rank や node 数を見て親を決め
る際に高さが低くなるように組むからこれも成立
 以下、辺が小さい方から大きい方に行くのを右に行く、と
呼ぶことにして、左に行く、も同様にその逆の意味で使う
これらの性質を使って
 これらの性質を使って、実際に何組あるか数えていきた
い(だから、AとBにこの変換を施しておく)
 やっぱり木の高さがlogオーダーであることは強いので、
これを利用することを考える
 そうすると、頂点の組に対して、一方の頂点を固定して
被らないようにうまく何通りあるかが分かれば、数え上げ
られると分かる
 諸事情により、あらかじめ左から右に向かっての順番で
根から行きがけ順の値を計算しておきます
一方を固定して
 一方を固定してどうすれば、重複がないようにできるか
を考える
 このとき、以下の制限上で数え上げればよい
 まず、固定する頂点をAの木においてはaであり、Bの木
においてbであると表す(実際は同じ頂点ではあるが)
 このとき、aから考える経路としては、aから少なくとも1回
以上親に向かってのぼっていき、そこからそこに登って
行った辺よりも左側の辺に向かって降りていくものだけを
考えればよい
一方を固定して
 次に、bの動きとしては、aですでに重複が消されている
ので重複は考えなくていいが、以下の二つの場合分けを
する
 一つ、bから少なくとも1回以上登って行って、そこから左
へ0回以上曲がる
 二つ、bから少なくとも0回以上登って行って、そこから右
へ1回以上曲がる
場合分け(1)
 bから少なくとも1回以上登って行って、そこから左へ0回
以上曲がる
 このとき、以下のような図になる
A社 B社
場合分け(1)
 このとき、最大重みは以下のようになる
A社 B社
ここ
場合分け(1)
 つまり、曲がる位置を決めたら、そこから左にどこまで曲
がろうと、関係ない
 しかも、この木の性質、三つ、から曲がる位置はa,bとも
に、根までのpathにおいて連続的に存在するので、曲が
る先の頂点の集合の行きがけ順の値は連続している
 よって、それぞれの行きがけ順の区間を[x,y],[z,w]とした
とき、[x,y]にAでの行きがけ順が、[z,w]にBでの行きがけ
順が入っている頂点の個数を数えればよい
場合分け(2)
 bから少なくとも0回以上登って行って、そこから右へ1回
以上曲がる
 このとき、状況は以下のようになる
A社 B社
場合分け(2)
 このとき、最大重みは以下のようになる
A社 B社
ここ
場合分け(2)
 つまり、曲がる位置を決めたら、そこから左にどこまで曲
がろうと、関係ないが、bが右に曲がる位置は全部試す
と間に合わない
 そこで、この木の性質、二つ、三つ、を利用すると、曲が
るべき位置は行きがけ順で連続する
 よって、それぞれの行きがけ順の区間を[x,y],[z,w]とした
とき、[x,y]にAでの行きがけ順が、[z,w]にBでの行きがけ
順が入っている頂点の個数を数えればよい
まとめ
 すなわち、以上の二つの場合分けによって得られる行き
がけ順の区間をすべて計算すると、木の高さがO(logN)
より、そのような区間はO(NlogN)個なので、これらの区
間の組の両方に入っている頂点を数え上げればよい
 これは、N個の頂点を(Aの行きがけ順、Bの行きがけ順)
で点とみなして、区間の組を長方形とみなすと、長方形
内に含まれる点の数を数えあげる問題に帰着される
まとめ
 これは、O((長方形と点)*logN)でできるので、つまり、全
体としての計算量はO(Nlog^2N)で解くことができる
 めでたしめでたし
 (部分点については省略します)
1 of 21

Recommended

北大クラスタリング・セミナー6 by
北大クラスタリング・セミナー6北大クラスタリング・セミナー6
北大クラスタリング・セミナー6Yutaka Nagahata
462 views17 slides
RUPC2017:L解説 by
RUPC2017:L解説RUPC2017:L解説
RUPC2017:L解説Takumi Yamashita
170 views6 slides
大きい行列の問題 by
大きい行列の問題大きい行列の問題
大きい行列の問題政孝 鍋島
126 views3 slides
大きい行列の問題 by
大きい行列の問題大きい行列の問題
大きい行列の問題nabeshimamasataka
129 views3 slides

More Related Content

Viewers also liked

IJPC C解説 by
IJPC C解説IJPC C解説
IJPC C解説yutaka1999
841 views14 slides
Kangaroos by
KangaroosKangaroos
Kangaroosyutaka1999
592 views33 slides
IJPC A解説 by
IJPC A解説IJPC A解説
IJPC A解説yutaka1999
899 views5 slides
IJPC-2 C問題解説 by
IJPC-2 C問題解説IJPC-2 C問題解説
IJPC-2 C問題解説yutaka1999
760 views14 slides
B by
BB
Byokozuna57
739 views10 slides
IJPC2015 D問題解説 by
IJPC2015 D問題解説IJPC2015 D問題解説
IJPC2015 D問題解説yokozuna57
531 views10 slides

Viewers also liked(10)

IJPC C解説 by yutaka1999
IJPC C解説IJPC C解説
IJPC C解説
yutaka1999841 views
IJPC A解説 by yutaka1999
IJPC A解説IJPC A解説
IJPC A解説
yutaka1999899 views
IJPC-2 C問題解説 by yutaka1999
IJPC-2 C問題解説IJPC-2 C問題解説
IJPC-2 C問題解説
yutaka1999760 views
IJPC2015 D問題解説 by yokozuna57
IJPC2015 D問題解説IJPC2015 D問題解説
IJPC2015 D問題解説
yokozuna57531 views
Ijpc2015 b しりとり木 by reew2n
Ijpc2015 b しりとり木Ijpc2015 b しりとり木
Ijpc2015 b しりとり木
reew2n672 views
IJPC-2 E問題解説 by yutaka1999
IJPC-2 E問題解説IJPC-2 E問題解説
IJPC-2 E問題解説
yutaka1999788 views
AtCoder Regular Contest 023 解説 by AtCoder Inc.
AtCoder Regular Contest 023 解説AtCoder Regular Contest 023 解説
AtCoder Regular Contest 023 解説
AtCoder Inc.5.8K views
AtCoder Regular Contest 034 解説 by AtCoder Inc.
AtCoder Regular Contest 034 解説AtCoder Regular Contest 034 解説
AtCoder Regular Contest 034 解説
AtCoder Inc.7.9K views

IJPC-2 D問題解説