SlideShare uma empresa Scribd logo
1 de 12
Baixar para ler offline
NPCA Programing Contest #2
          Div1 C


私を月に連れてって
問題概要
●   ツリー状の飛行路を使って地球から月へ
    行く
●   移動できる距離の上限Mが決まっている
●   できるだけ多くの頂点をたどりたい
分かること
●   最終的には必ず月に到着する
    →地球から月へのパスは必ず通る
    →最終的な経路はこのパスを含む部分木
    になっている
確定している経路
      月




  地
最終的な経路
     月




 地
方針
●   一旦地球から月へのパスのことを忘れる
    と、求めるのは辺のコストの合計がM以下
    である部分木のうち頂点数が最大のもの
●   頂点数が最大→同じ頂点数の時コストが最
    小
●   よって
    dp[v][i]:頂点vを根とし、頂点数がiである部
    分木のうちコストの合計の最小値
    を考え、下の方の頂点からdpテーブルを
    マージしていけばよい
方針
●   頂点vを親としたとき、ある子uで頂点をi個
    使い、他の子と親で合計頂点をj個使うとす
    ると
    dp[v][i+j]=min(dp[v][i+j],
                   dp[u][i]+dp[v][j]+cost* 2)

●   これを辺の数(n+1)回行い、i<=n+2,j<=n+2
    なので計算量がO(n^3)になってやばそう?
計算量
●   検証してみる
●   サイズxの部分木のdpテーブルを作るの
    に必要な計算量をf(x)とする
●   サイズa、bの部分木を作り、それらを
    くっつけてサイズa+bを作る時の計算量
    は
    f(a+b) = f(a) + f(b) + ab
●   ここで明らかにf(1) = 1
計算量
●   帰納法を用いる
●   f(x) ≦ x^2 を仮定したとき、
    f(a+b) = f(a) + f(b) + ab ≦ a^2 + b^2 + ab
                                 ≦ (a+b)^2
●   これと f(1) ≦ 1^2 より f(x) ≦ x^2 が成り
    立つ
●   よって計算量はO(n^2)となり、十分間に
    合う!
実装例
●   月を根としてDFSしながらdpテーブルを
    更新していく
    – DFSの返り値にその下に地球があるか
      どうかを持たせ、あればそのdpテーブ
      ルを(頂点数を+1,コストを+(辺のコス
      ト)して)コピー、なければ先ほどのよ
      うに更新していく
●   あらかじめ地球から月へのパスを一つの
    頂点としてマージしておき、残りを普通
    の木と同様にやるという方法もある
注意点
●   辺のコストを足すとき×2を忘れないよう
    に
    (地球ー月間のパス以外)
●   頂点数はn+2
●   地球と月には餅屋はないので、答えは(頂
    点数)-2
●   貪欲でいける!と思ってしまうと死にま
    す(writer談)
●   First AC:nadeko
●   Accept数:7
●   Submission数: 37

Mais conteúdo relacionado

Mais procurados

LL Quiz LT @ LL Diver
LL Quiz LT @ LL DiverLL Quiz LT @ LL Diver
LL Quiz LT @ LL Diverwataken44
 
Magical
MagicalMagical
Magicaloupc
 
120414 foss4g nagoya_presentation2
120414 foss4g nagoya_presentation2120414 foss4g nagoya_presentation2
120414 foss4g nagoya_presentation2Takayuki Nuimura
 
仕事をしよう!
仕事をしよう!仕事をしよう!
仕事をしよう!gotoloop
 
球面フィッティングの導出と実装
球面フィッティングの導出と実装球面フィッティングの導出と実装
球面フィッティングの導出と実装j_rocket_boy
 
Ninja of Train
Ninja of TrainNinja of Train
Ninja of Traintomerun
 
KMC 競技プログラミング練習会 Advanced 第3回 ふろー
KMC 競技プログラミング練習会 Advanced 第3回 ふろーKMC 競技プログラミング練習会 Advanced 第3回 ふろー
KMC 競技プログラミング練習会 Advanced 第3回 ふろーkyoto university
 
RUPC2014_Day2_G
RUPC2014_Day2_GRUPC2014_Day2_G
RUPC2014_Day2_Gs1190048
 
円形アレイを用いた水平面3次元音場の収録と再現
円形アレイを用いた水平面3次元音場の収録と再現円形アレイを用いた水平面3次元音場の収録と再現
円形アレイを用いた水平面3次元音場の収録と再現Takuma_OKAMOTO
 
Sclalaz Kleisli の使い方
Sclalaz Kleisli の使い方Sclalaz Kleisli の使い方
Sclalaz Kleisli の使い方Masaru Watanabe
 

Mais procurados (13)

LL Quiz LT @ LL Diver
LL Quiz LT @ LL DiverLL Quiz LT @ LL Diver
LL Quiz LT @ LL Diver
 
Magical
MagicalMagical
Magical
 
diff template library
diff template librarydiff template library
diff template library
 
120414 foss4g nagoya_presentation2
120414 foss4g nagoya_presentation2120414 foss4g nagoya_presentation2
120414 foss4g nagoya_presentation2
 
RUPC2017:L解説
RUPC2017:L解説RUPC2017:L解説
RUPC2017:L解説
 
仕事をしよう!
仕事をしよう!仕事をしよう!
仕事をしよう!
 
球面フィッティングの導出と実装
球面フィッティングの導出と実装球面フィッティングの導出と実装
球面フィッティングの導出と実装
 
二分探索をはじめからていねいに
二分探索をはじめからていねいに二分探索をはじめからていねいに
二分探索をはじめからていねいに
 
Ninja of Train
Ninja of TrainNinja of Train
Ninja of Train
 
KMC 競技プログラミング練習会 Advanced 第3回 ふろー
KMC 競技プログラミング練習会 Advanced 第3回 ふろーKMC 競技プログラミング練習会 Advanced 第3回 ふろー
KMC 競技プログラミング練習会 Advanced 第3回 ふろー
 
RUPC2014_Day2_G
RUPC2014_Day2_GRUPC2014_Day2_G
RUPC2014_Day2_G
 
円形アレイを用いた水平面3次元音場の収録と再現
円形アレイを用いた水平面3次元音場の収録と再現円形アレイを用いた水平面3次元音場の収録と再現
円形アレイを用いた水平面3次元音場の収録と再現
 
Sclalaz Kleisli の使い方
Sclalaz Kleisli の使い方Sclalaz Kleisli の使い方
Sclalaz Kleisli の使い方
 

Destaque

Cをやりましょう
CをやりましょうCをやりましょう
CをやりましょうKen Ogura
 
かけざん
かけざんかけざん
かけざんKen Ogura
 
Deque with Haskel
Deque with HaskelDeque with Haskel
Deque with HaskelKen Ogura
 
人間対Pc2
人間対Pc2人間対Pc2
人間対Pc2Ken Ogura
 
Npc april fool2014
Npc april fool2014Npc april fool2014
Npc april fool2014Ken Ogura
 
Amortize analysis of Deque with 2 Stack
Amortize analysis of Deque with 2 StackAmortize analysis of Deque with 2 Stack
Amortize analysis of Deque with 2 StackKen Ogura
 
ハッキング実演
ハッキング実演ハッキング実演
ハッキング実演Ken Ogura
 

Destaque (16)

Cをやりましょう
CをやりましょうCをやりましょう
Cをやりましょう
 
Yarudake
YarudakeYarudake
Yarudake
 
かけざん
かけざんかけざん
かけざん
 
April2013
April2013April2013
April2013
 
PC解体
PC解体PC解体
PC解体
 
Mage
MageMage
Mage
 
April2013
April2013April2013
April2013
 
Deque with Haskel
Deque with HaskelDeque with Haskel
Deque with Haskel
 
Trianguler
TriangulerTrianguler
Trianguler
 
Jissou
JissouJissou
Jissou
 
人間対Pc2
人間対Pc2人間対Pc2
人間対Pc2
 
Npc april fool2014
Npc april fool2014Npc april fool2014
Npc april fool2014
 
Imo
ImoImo
Imo
 
Amortize analysis of Deque with 2 Stack
Amortize analysis of Deque with 2 StackAmortize analysis of Deque with 2 Stack
Amortize analysis of Deque with 2 Stack
 
辺彩色
辺彩色辺彩色
辺彩色
 
ハッキング実演
ハッキング実演ハッキング実演
ハッキング実演
 

Mais de Ken Ogura

Mais de Ken Ogura (14)

計算量
計算量計算量
計算量
 
Shio dtm
Shio dtmShio dtm
Shio dtm
 
Hairetu2
Hairetu2Hairetu2
Hairetu2
 
Lunch
LunchLunch
Lunch
 
Divisor
DivisorDivisor
Divisor
 
Homework
HomeworkHomework
Homework
 
Pool
PoolPool
Pool
 
Sns
SnsSns
Sns
 
Pencil
PencilPencil
Pencil
 
Spell check
Spell checkSpell check
Spell check
 
Black board
Black boardBlack board
Black board
 
Donyoku
DonyokuDonyoku
Donyoku
 
Nazoki
NazokiNazoki
Nazoki
 
人材発掘うっはうは
人材発掘うっはうは人材発掘うっはうは
人材発掘うっはうは
 

Moon

  • 1. NPCA Programing Contest #2 Div1 C 私を月に連れてって
  • 2. 問題概要 ● ツリー状の飛行路を使って地球から月へ 行く ● 移動できる距離の上限Mが決まっている ● できるだけ多くの頂点をたどりたい
  • 3. 分かること ● 最終的には必ず月に到着する →地球から月へのパスは必ず通る →最終的な経路はこのパスを含む部分木 になっている
  • 6. 方針 ● 一旦地球から月へのパスのことを忘れる と、求めるのは辺のコストの合計がM以下 である部分木のうち頂点数が最大のもの ● 頂点数が最大→同じ頂点数の時コストが最 小 ● よって dp[v][i]:頂点vを根とし、頂点数がiである部 分木のうちコストの合計の最小値 を考え、下の方の頂点からdpテーブルを マージしていけばよい
  • 7. 方針 ● 頂点vを親としたとき、ある子uで頂点をi個 使い、他の子と親で合計頂点をj個使うとす ると dp[v][i+j]=min(dp[v][i+j], dp[u][i]+dp[v][j]+cost* 2) ● これを辺の数(n+1)回行い、i<=n+2,j<=n+2 なので計算量がO(n^3)になってやばそう?
  • 8. 計算量 ● 検証してみる ● サイズxの部分木のdpテーブルを作るの に必要な計算量をf(x)とする ● サイズa、bの部分木を作り、それらを くっつけてサイズa+bを作る時の計算量 は f(a+b) = f(a) + f(b) + ab ● ここで明らかにf(1) = 1
  • 9. 計算量 ● 帰納法を用いる ● f(x) ≦ x^2 を仮定したとき、 f(a+b) = f(a) + f(b) + ab ≦ a^2 + b^2 + ab  ≦ (a+b)^2 ● これと f(1) ≦ 1^2 より f(x) ≦ x^2 が成り 立つ ● よって計算量はO(n^2)となり、十分間に 合う!
  • 10. 実装例 ● 月を根としてDFSしながらdpテーブルを 更新していく – DFSの返り値にその下に地球があるか どうかを持たせ、あればそのdpテーブ ルを(頂点数を+1,コストを+(辺のコス ト)して)コピー、なければ先ほどのよ うに更新していく ● あらかじめ地球から月へのパスを一つの 頂点としてマージしておき、残りを普通 の木と同様にやるという方法もある
  • 11. 注意点 ● 辺のコストを足すとき×2を忘れないよう に (地球ー月間のパス以外) ● 頂点数はn+2 ● 地球と月には餅屋はないので、答えは(頂 点数)-2 ● 貪欲でいける!と思ってしまうと死にま す(writer談)
  • 12. First AC:nadeko ● Accept数:7 ● Submission数: 37