Submit Search
Upload
IJPC-2 D問題解説
Report
Share
Y
yutaka1999
Follow
•
0 likes
•
829 views
1
of
21
IJPC-2 D問題解説
•
0 likes
•
829 views
Report
Share
Download Now
Download to read offline
Science
https://ijpc2015-2.contest.atcoder.jp/ これのD問題の解説です。
Read more
Y
yutaka1999
Follow
Recommended
北大クラスタリング・セミナー6 by
北大クラスタリング・セミナー6
Yutaka Nagahata
462 views
•
17 slides
全域木いろいろ by
全域木いろいろ
HCPC: 北海道大学競技プログラミングサークル
7K views
•
25 slides
RUPC2017:L解説 by
RUPC2017:L解説
Takumi Yamashita
170 views
•
6 slides
大きい行列の問題 by
大きい行列の問題
政孝 鍋島
126 views
•
3 slides
大きい行列の問題 by
大きい行列の問題
nabeshimamasataka
129 views
•
3 slides
Pad入門その3 by
Pad入門その3
長岡技術科学大学 自然言語処理研究室
888 views
•
4 slides
More Related Content
Viewers also liked
IJPC C解説 by
IJPC C解説
yutaka1999
841 views
•
14 slides
Kangaroos by
Kangaroos
yutaka1999
592 views
•
33 slides
IJPC A解説 by
IJPC A解説
yutaka1999
899 views
•
5 slides
IJPC-2 C問題解説 by
IJPC-2 C問題解説
yutaka1999
760 views
•
14 slides
B by
B
yokozuna57
739 views
•
10 slides
IJPC2015 D問題解説 by
IJPC2015 D問題解説
yokozuna57
531 views
•
10 slides
Viewers also liked
(10)
IJPC C解説 by yutaka1999
IJPC C解説
yutaka1999
•
841 views
Kangaroos by yutaka1999
Kangaroos
yutaka1999
•
592 views
IJPC A解説 by yutaka1999
IJPC A解説
yutaka1999
•
899 views
IJPC-2 C問題解説 by yutaka1999
IJPC-2 C問題解説
yutaka1999
•
760 views
B by yokozuna57
B
yokozuna57
•
739 views
IJPC2015 D問題解説 by yokozuna57
IJPC2015 D問題解説
yokozuna57
•
531 views
Ijpc2015 b しりとり木 by reew2n
Ijpc2015 b しりとり木
reew2n
•
672 views
IJPC-2 E問題解説 by yutaka1999
IJPC-2 E問題解説
yutaka1999
•
788 views
AtCoder Regular Contest 023 解説 by AtCoder Inc.
AtCoder Regular Contest 023 解説
AtCoder Inc.
•
5.8K views
AtCoder Regular Contest 034 解説 by AtCoder Inc.
AtCoder Regular Contest 034 解説
AtCoder Inc.
•
7.9K views
IJPC-2 D問題解説
1.
D 鉄道会社 @takayuta1999
2.
問題概要 𝑁頂点からなる重み付き木AとBが与えられる どちらも、1~𝑁の頂点がある
異なる二頂点の組であって、どちらの木においてもpath 上の最大重みが等しくなるような組の数を求めよ。
3.
解法 path上の最大重みを求めるときにO(loglog)にする一般 的なテクを思い出す Union
Find に小さい辺から入れていってつないでいけ ばよさそう?
4.
解法-part 1 与えられた木を短い順に辺を加えていって、UFでrootど うしをつなげて得られる木に組み替える (同じ長さの辺は適当な順番で加えていく)
そうするとどのような性質が見られるだろうか
5.
Sample-1 A社 1 2 3 45 5 3 1 3 これを
6.
Sample-1 A社 1 3 1 こうして 2 5 3 1 4 3 1 2 5 3 1→ → → 最後にこれを加えると…
7.
Sample-1 A社 こうじゃ 2 5 3 1 4 35 3 1
8.
Sample-1 A社 諸事情により各頂点に対して、子に向 かって降りる辺を長さでソートする 2 5 3 1 4 3 5 3 1
9.
例を見る このUFで組み替えた木の性質を見る 一つ、pathの最大重みはLCAの右側の長さなり
二つ、辺はそれを斬って分割される木の内、根を含まな い方の木に含まれるいかなる辺以上の長さをもつ 三つ、どの頂点においても、その頂点から子に向かって 出る辺は右に行くほど長くなる(長さが同じことも) 四つ、この木の高さはO(logN)である
10.
証明っぽいコメント 一つ、二つはUnion Find
でつなげる過程を見れば示せ る 三つ、はこうなるようにソートしたからそうでなきゃだめ 四つ、はUnion Find で rank や node 数を見て親を決め る際に高さが低くなるように組むからこれも成立 以下、辺が小さい方から大きい方に行くのを右に行く、と 呼ぶことにして、左に行く、も同様にその逆の意味で使う
11.
これらの性質を使って これらの性質を使って、実際に何組あるか数えていきた い(だから、AとBにこの変換を施しておく) やっぱり木の高さがlogオーダーであることは強いので、 これを利用することを考える
そうすると、頂点の組に対して、一方の頂点を固定して 被らないようにうまく何通りあるかが分かれば、数え上げ られると分かる 諸事情により、あらかじめ左から右に向かっての順番で 根から行きがけ順の値を計算しておきます
12.
一方を固定して 一方を固定してどうすれば、重複がないようにできるか を考える このとき、以下の制限上で数え上げればよい
まず、固定する頂点をAの木においてはaであり、Bの木 においてbであると表す(実際は同じ頂点ではあるが) このとき、aから考える経路としては、aから少なくとも1回 以上親に向かってのぼっていき、そこからそこに登って 行った辺よりも左側の辺に向かって降りていくものだけを 考えればよい
13.
一方を固定して 次に、bの動きとしては、aですでに重複が消されている ので重複は考えなくていいが、以下の二つの場合分けを する 一つ、bから少なくとも1回以上登って行って、そこから左 へ0回以上曲がる
二つ、bから少なくとも0回以上登って行って、そこから右 へ1回以上曲がる
14.
場合分け(1) bから少なくとも1回以上登って行って、そこから左へ0回 以上曲がる このとき、以下のような図になる A社
B社
15.
場合分け(1) このとき、最大重みは以下のようになる A社 B社 ここ
16.
場合分け(1) つまり、曲がる位置を決めたら、そこから左にどこまで曲 がろうと、関係ない しかも、この木の性質、三つ、から曲がる位置はa,bとも に、根までのpathにおいて連続的に存在するので、曲が る先の頂点の集合の行きがけ順の値は連続している
よって、それぞれの行きがけ順の区間を[x,y],[z,w]とした とき、[x,y]にAでの行きがけ順が、[z,w]にBでの行きがけ 順が入っている頂点の個数を数えればよい
17.
場合分け(2) bから少なくとも0回以上登って行って、そこから右へ1回 以上曲がる このとき、状況は以下のようになる A社
B社
18.
場合分け(2) このとき、最大重みは以下のようになる A社 B社 ここ
19.
場合分け(2) つまり、曲がる位置を決めたら、そこから左にどこまで曲 がろうと、関係ないが、bが右に曲がる位置は全部試す と間に合わない そこで、この木の性質、二つ、三つ、を利用すると、曲が るべき位置は行きがけ順で連続する
よって、それぞれの行きがけ順の区間を[x,y],[z,w]とした とき、[x,y]にAでの行きがけ順が、[z,w]にBでの行きがけ 順が入っている頂点の個数を数えればよい
20.
まとめ すなわち、以上の二つの場合分けによって得られる行き がけ順の区間をすべて計算すると、木の高さがO(logN) より、そのような区間はO(NlogN)個なので、これらの区 間の組の両方に入っている頂点を数え上げればよい これは、N個の頂点を(Aの行きがけ順、Bの行きがけ順) で点とみなして、区間の組を長方形とみなすと、長方形 内に含まれる点の数を数えあげる問題に帰着される
21.
まとめ これは、O((長方形と点)*logN)でできるので、つまり、全 体としての計算量はO(Nlog^2N)で解くことができる めでたしめでたし
(部分点については省略します)