SlideShare una empresa de Scribd logo
1 de 21
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)で解くことができる
 めでたしめでたし
 (部分点については省略します)

Más contenido relacionado

Destacado

IJPC-2 C問題解説
IJPC-2 C問題解説IJPC-2 C問題解説
IJPC-2 C問題解説yutaka1999
 
IJPC2015 D問題解説
IJPC2015 D問題解説IJPC2015 D問題解説
IJPC2015 D問題解説yokozuna57
 
Ijpc2015 b しりとり木
Ijpc2015 b しりとり木Ijpc2015 b しりとり木
Ijpc2015 b しりとり木reew2n
 
IJPC-2 E問題解説
IJPC-2 E問題解説IJPC-2 E問題解説
IJPC-2 E問題解説yutaka1999
 
AtCoder Regular Contest 023 解説
AtCoder Regular Contest 023 解説AtCoder Regular Contest 023 解説
AtCoder Regular Contest 023 解説AtCoder Inc.
 
AtCoder Regular Contest 034 解説
AtCoder Regular Contest 034 解説AtCoder Regular Contest 034 解説
AtCoder Regular Contest 034 解説AtCoder Inc.
 

Destacado (10)

IJPC C解説
IJPC C解説IJPC C解説
IJPC C解説
 
Kangaroos
KangaroosKangaroos
Kangaroos
 
IJPC A解説
IJPC A解説IJPC A解説
IJPC A解説
 
IJPC-2 C問題解説
IJPC-2 C問題解説IJPC-2 C問題解説
IJPC-2 C問題解説
 
B
BB
B
 
IJPC2015 D問題解説
IJPC2015 D問題解説IJPC2015 D問題解説
IJPC2015 D問題解説
 
Ijpc2015 b しりとり木
Ijpc2015 b しりとり木Ijpc2015 b しりとり木
Ijpc2015 b しりとり木
 
IJPC-2 E問題解説
IJPC-2 E問題解説IJPC-2 E問題解説
IJPC-2 E問題解説
 
AtCoder Regular Contest 023 解説
AtCoder Regular Contest 023 解説AtCoder Regular Contest 023 解説
AtCoder Regular Contest 023 解説
 
AtCoder Regular Contest 034 解説
AtCoder Regular Contest 034 解説AtCoder Regular Contest 034 解説
AtCoder Regular Contest 034 解説
 

IJPC-2 D問題解説