Successfully reported this slideshow.
Your SlideShare is downloading. ×

IJPC-2 D問題解説

Ad

D 鉄道会社
@takayuta1999

Ad

問題概要
 𝑁頂点からなる重み付き木AとBが与えられる
 どちらも、1~𝑁の頂点がある
 異なる二頂点の組であって、どちらの木においてもpath
上の最大重みが等しくなるような組の数を求めよ。

Ad

解法
 path上の最大重みを求めるときにO(loglog)にする一般
的なテクを思い出す
 Union Find に小さい辺から入れていってつないでいけ
ばよさそう?

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Loading in …3
×

Check these out next

1 of 21 Ad
1 of 21 Ad
Advertisement

More Related Content

Advertisement

IJPC-2 D問題解説

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

×