2013 JOI春合宿 Day2 Spy(スパイ) 解説

20
2013/03/21 山下 洋史 @utatakiyoshi 2013 JOI春合宿 Day2 Spy(スパイ) 解説

Transcript of 2013 JOI春合宿 Day2 Spy(スパイ) 解説

Page 1: 2013 JOI春合宿 Day2 Spy(スパイ) 解説

2013/03/21山下 洋史@utatakiyoshi

2013 JOI春合宿 Day2Spy(スパイ) 解説

Page 2: 2013 JOI春合宿 Day2 Spy(スパイ) 解説

2013/03/212013 JOI春合宿 Day2 Spy(スパイ) 解説

・JOI社とIOI社の社員の木構造が与えられる

・リーダーの配下にあるメンバー全員からなるプロジェクト達が与えられる

おさらい

2

j1

j2

j3

i2

i1 i3

r2 r4

s4

s2

Page 3: 2013 JOI春合宿 Day2 Spy(スパイ) 解説

2013/03/212013 JOI春合宿 Day2 Spy(スパイ) 解説

・2つの木の対応する頂点について,いくつ同じグループに入っているかを数える

・社員数:N<=2000,プロジェクト数:M<=500000

おさらい

3

2

1 3

1

2

33はどちらも青に入っている

Page 4: 2013 JOI春合宿 Day2 Spy(スパイ) 解説

2013/03/212013 JOI春合宿 Day2 Spy(スパイ) 解説

・「社員aがプロジェクトbに属する」がすべてのa,bについて分かればO(NM)でできる

・木を上に辿ってリーダーに辿り着くか調べる

・1人1プロジェクトにつきO(N),合計でO(N^2M)

小課題 1 :社員aはプロジェクトbにいる?

4

a

R1

Page 5: 2013 JOI春合宿 Day2 Spy(スパイ) 解説

2013/03/212013 JOI春合宿 Day2 Spy(スパイ) 解説

小課題 2 (a):社員xはどのプロジェクトにいる?

・1人の社員については,1回木を辿っておけば全てのプロジェクトについて属するかどうか分かる

・1回木を辿る:O(N+M)

・それがN回でO(N(N+M))

・その後,O(NM)5

R1

R2 R3

x は R1 と R2 に属する

x

Page 6: 2013 JOI春合宿 Day2 Spy(スパイ) 解説

2013/03/212013 JOI春合宿 Day2 Spy(スパイ) 解説

小課題 2 (b):プロジェクトxにはどの社員がいる?

・リーダーから深さ優先探索すればメンバーが列挙できる

・プロジェクトの個数回探索:O(NM)

・その後,O(NM)

6

R1

Page 7: 2013 JOI春合宿 Day2 Spy(スパイ) 解説

2013/03/212013 JOI春合宿 Day2 Spy(スパイ) 解説

問題点

・プロジェクトが M=500000 もある

・1つあたりO(1)時間しかかけたくない!

7

Page 8: 2013 JOI春合宿 Day2 Spy(スパイ) 解説

2013/03/212013 JOI春合宿 Day2 Spy(スパイ) 解説

木の嬉しい順番

・木を深さ優先探索で走査

→ノードを訪れた順番に並べる

・木が列のデータになる

8

B

A

C

F

G

E

H

D

A B C F G F H F C B D B E B A

Page 9: 2013 JOI春合宿 Day2 Spy(スパイ) 解説

2013/03/212013 JOI春合宿 Day2 Spy(スパイ) 解説

何が嬉しい?

9

B

A

C

F

G

E

H

D

A B C F G F H F C B D B E B A

・最小共通祖先(LCA)問題への応用(省略)・Euler Tour Technique と呼ばれることがあります

・部分木が根ノードを両端にする区間に対応する

Page 10: 2013 JOI春合宿 Day2 Spy(スパイ) 解説

2013/03/212013 JOI春合宿 Day2 Spy(スパイ) 解説

やりたいこと

10

2

1 3

1

2

3

0 1 0 00 1 2 1 00 0 1 0 00 0 1 0 00 0 1 0 0

0

1 2 3 2 1

21232

・projectの組が長方形になり,同じ番号の社員の組がマス目になる

→マス目の上に長方形がいくつ重なっているか を数える

Page 11: 2013 JOI春合宿 Day2 Spy(スパイ) 解説

2013/03/212013 JOI春合宿 Day2 Spy(スパイ) 解説

長方形を足すのは大変

11

2

1 3

1

2

3

1 2 1 11 1 2 1 11 1 2 1 11 1 2 1 11 1 2 1 1

1

1 2 3 2 1

21232

・表はO(N)×O(N)の大きさ 長方形も同じ

・愚直にマス目を塗るとO(N^2M)かかる

Page 12: 2013 JOI春合宿 Day2 Spy(スパイ) 解説

2013/03/212013 JOI春合宿 Day2 Spy(スパイ) 解説

領域に値を足す:1 次元の場合

12

0 1 1 20 2 1 1 02

0 1 0 10 0 -1 0 -10

0 0 0 00 0 0 0 00

始点に 1 を足し,終点の後ろに -1 を足す

累積和を取るO(N)

O(Q)

・配列サイズ: N ・区間の個数:Q ・各区間に 1 を足す

Page 13: 2013 JOI春合宿 Day2 Spy(スパイ) 解説

2013/03/212013 JOI春合宿 Day2 Spy(スパイ) 解説

領域に値を足す: 2 次元の場合(1)

13

0 1 00 1 1 -1 -10 0 1 00 0 1 00 0 1 0

0

1 2 3 2 1

21232

0 1 0 00 1 2 1 00 0 1 0 00 0 1 0 00 0 1 0 0

0

1 2 3 2 1

21232

-1-1

-1

-1

こうするためにこうなってほしい

横に累積和をとる

Page 14: 2013 JOI春合宿 Day2 Spy(スパイ) 解説

2013/03/212013 JOI春合宿 Day2 Spy(スパイ) 解説14

0 1 00 1 1 -1 -10 0 1 00 0 1 00 0 1 0

0

1 2 3 2 1

21232

0 1 -1 00 1 0 0 -10 -1 0 0 10 0 0 0 00 0 0 0 0

0

1 2 3 2 1

21232

-1-1

-1

-1

こうなってほしいこうするために

縦に累積和をとる

-1 1

領域に値を足す: 2 次元の場合(2)

Page 15: 2013 JOI春合宿 Day2 Spy(スパイ) 解説

2013/03/212013 JOI春合宿 Day2 Spy(スパイ) 解説15

0 1 -1 00 1 0 0 -10 -1 0 0 10 0 0 0 00 0 0 0 0

0

1 2 3 2 1

21232

-1 1

領域に値を足す: 2 次元の場合(3)

1

-1

-1

1

長方形について

を足せばよい.(長方形1つあたり定数時間)

(こうした手法はJOI界隈ではimos法と呼ばれています)

Page 16: 2013 JOI春合宿 Day2 Spy(スパイ) 解説

2013/03/212013 JOI春合宿 Day2 Spy(スパイ) 解説

解法のまとめ

・Euler Tour Techniqueを用いてJOI木,IOI木をそれぞれ1列化

・各社員の現れる位置を1つ覚えておく

・各頂点を根とした部分木の区間も覚えておく

・2N×2Nの配列をとり,各プロジェクトの組について

 [JOI木での区間]×[IOI木での区間]の長方形を”塗る”

 (1,-1を適切なところに足す)

・縦横に累積和をとる

・各aについて,配列の[jaが現れる位置][iaが現れる位置]を出力する

16

Page 17: 2013 JOI春合宿 Day2 Spy(スパイ) 解説

2013/03/212013 JOI春合宿 Day2 Spy(スパイ) 解説

計算量?

・2つの木のDFS O(N)

・長方形の個数×定数時間 O(M)

・2回累積和をとる O((2N)^2)

・M <= 500000, N <= 2000

・間に合う

17

(実は行き掛け順でよいのでもっと少なく出来る)

Page 18: 2013 JOI春合宿 Day2 Spy(スパイ) 解説

2013/03/212013 JOI春合宿 Day2 Spy(スパイ) 解説

得点分布

18

0

2

4

6

8

10

0 10 20 30 40 50 60 70 80 90 100

Page 19: 2013 JOI春合宿 Day2 Spy(スパイ) 解説

2013/03/212013 JOI春合宿 Day2 Spy(スパイ) 解説

DPによる解法

・詳しくは説明しません

・キーとなる式がこちらdp[j][i] = project[j ][i ] + dp[j.parent][i ] + dp[j ][i.parent]- dp[j.parent][i.parent]

・スライドをアップロードするのでこれを見て考えてみてください

19

Page 20: 2013 JOI春合宿 Day2 Spy(スパイ) 解説

2013/03/212013 JOI春合宿 Day2 Spy(スパイ) 解説

関連するJOIの問題

・少し幸せ になる木の順番・2010-day4 高速道路(Highway) ・2011-day3 報告(Report)

・領域をO(1)で塗る・2012 本選4 釘(Nails) ・2010-day4 プラグ(Plugs)

20