SlideShare a Scribd company logo
1 of 13
Download to read offline
会津合宿 2019 Day3 G 問題
Restricted DFS
原案: tsutaj
問題文: tsutaj
解答: tsutaj・rsk0315
解説: tsutaj
2019 年 9 月 20 日
tsutaj ACPC 2019 Day3 G 2019/9/20 1 / 13
問題
Restricted DFS
▶ 木が与えられ、それぞれの頂点 i には整数 Ai が定められている
▶ 頂点 i から DFS することを考える
▶ 頂点番号が若い順に子を見る
▶ ある頂点を訪れようとする際に Ai の値が 0 になっていれば、そこで
DFS 打ち切り
▶ Ai が正ならば、その頂点を訪れ Ai をデクリメントし、次の探索に進む
▶ それぞれの頂点から DFS をはじめたときのステップ数を求める
制約
▶ 1 ≤ N ≤ 2 × 105
▶ 0 ≤ Ai ≤ 109
tsutaj ACPC 2019 Day3 G 2019/9/20 2 / 13
想定誤解法
▶ 普通に毎回 DFS をする
▶ 1 回の DFS に O(N) かかり、それを各頂点に関してやるので・・・
▶ O(N2
) かかり間に合わない
▶ なんらかの形で値を再利用しないと間に合わなさそう
tsutaj ACPC 2019 Day3 G 2019/9/20 3 / 13
想定解法
想定解法: 全方位木 DP
▶ 最初に適当な頂点を根とし、各頂点について以下を求める
▶ v1 : その頂点を根とする部分木でかかるステップ数
▶ v2 : その頂点から DFS をスタートして、途中で探索が失敗するか
▶ v1 と v2 の更新に気をつけて、rerooting
次に例を示します
tsutaj ACPC 2019 Day3 G 2019/9/20 4 / 13
想定解法
以下のような木があったとする
赤文字は各頂点に割り当てられた Ai の値を表す
3
5
2 1
2
1
1 3
tsutaj ACPC 2019 Day3 G 2019/9/20 5 / 13
想定解法
それぞれの頂点について v1 を求める (青文字)
3
5
2 1
2
1
1 3
10
5
1 1
1 1
2
3
tsutaj ACPC 2019 Day3 G 2019/9/20 6 / 13
想定解法
さらに v2 も求める (黒で塗ったものが、v2 が true である頂点)
▶ 子が m 個あるような頂点は m + 1 回デクリメントされるため、
Ai < m + 1 となる頂点は true となる
▶ 自分の子であって v2 が true となる頂点があるとき、自分自身に戻っ
てこれないため true となる
3
5
2 1
2
1
1 3
10
5
1 1
1 1
2
3
tsutaj ACPC 2019 Day3 G 2019/9/20 7 / 13
想定解法
これで根が r であるときの答えは得られた
根を c に変えた時の答えはどう得られるか?
3
5
2 1
2
1
1 3
10
5
1 1
1 1
2
3
r
c
tsutaj ACPC 2019 Day3 G 2019/9/20 8 / 13
想定解法
以下の順に処理!
1. c 以下の部分木を無視した状態で r について v1, v2 を再計算
2. c に r 以下の部分木が繋がったとして、c について v1, v2 を再計算
3
5
2 1
2
1
1 3
10
5
1 1
1 1
2
3
r
c
tsutaj ACPC 2019 Day3 G 2019/9/20 9 / 13
想定解法
1. の操作はこういうイメージ
3
5
2 1
2
1
1 3
10
5
1 1
1 1
2
3
r7
tsutaj ACPC 2019 Day3 G 2019/9/20 10 / 13
想定解法
2. の操作はこういうイメージ
3
5
2 1
2
1
1 3
7
5
1 1
1 1
2
3
r
c11
tsutaj ACPC 2019 Day3 G 2019/9/20 11 / 13
想定解法
▶ v1, v2 の更新は区間和が扱えるデータ構造 (SegmentTree など) を使
いながらやるとできます
▶ 自分と辺で直接接続している頂点の vector を、頂点番号の昇順に持つ
▶ 自分の親である頂点を無視する必要があるが、v1 = 0, v2 = false とし
て扱うと若干処理しやすいかも?
▶ それぞれの rerooting に O(log N) かかるため、全体で O(N log N)
で解けます
その他
▶ 工夫次第だと思いますが、実装はだいぶ重いと思います
▶ 抽象化された全方位木 DP ライブラリは使えるのでしょうか? 今回の
問題において左・右の累積でどうにかする戦略はおそらく使えないの
で、きびしいだろうと思っていました
tsutaj ACPC 2019 Day3 G 2019/9/20 12 / 13
Writer 解・統計
▶ Tester 解
▶ tsutaj (C++・241 行・8013 bytes)
▶ rsk0315 (C++・376 行・10979 bytes)
▶ 統計
▶ AC / tried: 2 / 9 (22.2 %)
▶ First AC
▶ On-site: ACPC_sakenichia (165 min 27 sec)
▶ On-line: lyrically (123 min 1 sec)
tsutaj ACPC 2019 Day3 G 2019/9/20 13 / 13

More Related Content

More from HCPC: 北海道大学競技プログラミングサークル

More from HCPC: 北海道大学競技プログラミングサークル (20)

写像 12 相
写像 12 相写像 12 相
写像 12 相
 
ACPC 2017 Day3 F: 掛け算は楽しい
ACPC 2017 Day3 F: 掛け算は楽しいACPC 2017 Day3 F: 掛け算は楽しい
ACPC 2017 Day3 F: 掛け算は楽しい
 
ACPC 2017 Day3 D: 優柔不断
ACPC 2017 Day3 D: 優柔不断ACPC 2017 Day3 D: 優柔不断
ACPC 2017 Day3 D: 優柔不断
 
ACPC 2019 Day3 F: 部分文字列分解
ACPC 2019 Day3 F: 部分文字列分解ACPC 2019 Day3 F: 部分文字列分解
ACPC 2019 Day3 F: 部分文字列分解
 
ACPC 2019 Day3 E: 総和の切り取り
ACPC 2019 Day3 E: 総和の切り取りACPC 2019 Day3 E: 総和の切り取り
ACPC 2019 Day3 E: 総和の切り取り
 
ACPC 2019 Day3 B: パフェ
ACPC 2019 Day3 B: パフェACPC 2019 Day3 B: パフェ
ACPC 2019 Day3 B: パフェ
 
ACPC 2019 Day3 A: 間違い探し
ACPC 2019 Day3 A: 間違い探しACPC 2019 Day3 A: 間違い探し
ACPC 2019 Day3 A: 間違い探し
 
HUPC 2019 Day2 G: 木
HUPC 2019 Day2 G: 木HUPC 2019 Day2 G: 木
HUPC 2019 Day2 G: 木
 
HUPC 2019 Day2 E: ジャム
HUPC 2019 Day2 E: ジャムHUPC 2019 Day2 E: ジャム
HUPC 2019 Day2 E: ジャム
 
HUPC 2019 Day2 H: Revenge of UMG
HUPC 2019 Day2 H: Revenge of UMGHUPC 2019 Day2 H: Revenge of UMG
HUPC 2019 Day2 H: Revenge of UMG
 
HUPC 2019 Day2 C: 串刺し
HUPC 2019 Day2 C: 串刺しHUPC 2019 Day2 C: 串刺し
HUPC 2019 Day2 C: 串刺し
 
HUPC 2019 Day1 F: グリッドの番号
HUPC 2019 Day1 F: グリッドの番号HUPC 2019 Day1 F: グリッドの番号
HUPC 2019 Day1 F: グリッドの番号
 
HUPC 2019 Day1 E: 最短経路の復元
HUPC 2019 Day1 E: 最短経路の復元HUPC 2019 Day1 E: 最短経路の復元
HUPC 2019 Day1 E: 最短経路の復元
 
HUPC 2019 Day1 D: 貪欲が最適?
HUPC 2019 Day1 D: 貪欲が最適?HUPC 2019 Day1 D: 貪欲が最適?
HUPC 2019 Day1 D: 貪欲が最適?
 
HUPC 2019 Day1 C: 短絡評価
HUPC 2019 Day1 C: 短絡評価HUPC 2019 Day1 C: 短絡評価
HUPC 2019 Day1 C: 短絡評価
 
HUPC 2019 Day1 B: 自身の 2 倍
HUPC 2019 Day1 B: 自身の 2 倍HUPC 2019 Day1 B: 自身の 2 倍
HUPC 2019 Day1 B: 自身の 2 倍
 
HUPC 2019 Day1 A: four tea
HUPC 2019 Day1 A: four teaHUPC 2019 Day1 A: four tea
HUPC 2019 Day1 A: four tea
 
Convex Hull Trick
Convex Hull TrickConvex Hull Trick
Convex Hull Trick
 
プログラミングコンテスト基礎テクニック
プログラミングコンテスト基礎テクニックプログラミングコンテスト基礎テクニック
プログラミングコンテスト基礎テクニック
 
RUPC 2019 Day3 G: Donuts Orientation
RUPC 2019 Day3 G: Donuts OrientationRUPC 2019 Day3 G: Donuts Orientation
RUPC 2019 Day3 G: Donuts Orientation
 

Recently uploaded

新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NTT DATA Technology & Innovation
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)Hiroshi Tomioka
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルCRI Japan, Inc.
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイスCRI Japan, Inc.
 

Recently uploaded (7)

新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 

ACPC 2019 Day3 G: Restricted DFS

  • 1. 会津合宿 2019 Day3 G 問題 Restricted DFS 原案: tsutaj 問題文: tsutaj 解答: tsutaj・rsk0315 解説: tsutaj 2019 年 9 月 20 日 tsutaj ACPC 2019 Day3 G 2019/9/20 1 / 13
  • 2. 問題 Restricted DFS ▶ 木が与えられ、それぞれの頂点 i には整数 Ai が定められている ▶ 頂点 i から DFS することを考える ▶ 頂点番号が若い順に子を見る ▶ ある頂点を訪れようとする際に Ai の値が 0 になっていれば、そこで DFS 打ち切り ▶ Ai が正ならば、その頂点を訪れ Ai をデクリメントし、次の探索に進む ▶ それぞれの頂点から DFS をはじめたときのステップ数を求める 制約 ▶ 1 ≤ N ≤ 2 × 105 ▶ 0 ≤ Ai ≤ 109 tsutaj ACPC 2019 Day3 G 2019/9/20 2 / 13
  • 3. 想定誤解法 ▶ 普通に毎回 DFS をする ▶ 1 回の DFS に O(N) かかり、それを各頂点に関してやるので・・・ ▶ O(N2 ) かかり間に合わない ▶ なんらかの形で値を再利用しないと間に合わなさそう tsutaj ACPC 2019 Day3 G 2019/9/20 3 / 13
  • 4. 想定解法 想定解法: 全方位木 DP ▶ 最初に適当な頂点を根とし、各頂点について以下を求める ▶ v1 : その頂点を根とする部分木でかかるステップ数 ▶ v2 : その頂点から DFS をスタートして、途中で探索が失敗するか ▶ v1 と v2 の更新に気をつけて、rerooting 次に例を示します tsutaj ACPC 2019 Day3 G 2019/9/20 4 / 13
  • 6. 想定解法 それぞれの頂点について v1 を求める (青文字) 3 5 2 1 2 1 1 3 10 5 1 1 1 1 2 3 tsutaj ACPC 2019 Day3 G 2019/9/20 6 / 13
  • 7. 想定解法 さらに v2 も求める (黒で塗ったものが、v2 が true である頂点) ▶ 子が m 個あるような頂点は m + 1 回デクリメントされるため、 Ai < m + 1 となる頂点は true となる ▶ 自分の子であって v2 が true となる頂点があるとき、自分自身に戻っ てこれないため true となる 3 5 2 1 2 1 1 3 10 5 1 1 1 1 2 3 tsutaj ACPC 2019 Day3 G 2019/9/20 7 / 13
  • 8. 想定解法 これで根が r であるときの答えは得られた 根を c に変えた時の答えはどう得られるか? 3 5 2 1 2 1 1 3 10 5 1 1 1 1 2 3 r c tsutaj ACPC 2019 Day3 G 2019/9/20 8 / 13
  • 9. 想定解法 以下の順に処理! 1. c 以下の部分木を無視した状態で r について v1, v2 を再計算 2. c に r 以下の部分木が繋がったとして、c について v1, v2 を再計算 3 5 2 1 2 1 1 3 10 5 1 1 1 1 2 3 r c tsutaj ACPC 2019 Day3 G 2019/9/20 9 / 13
  • 10. 想定解法 1. の操作はこういうイメージ 3 5 2 1 2 1 1 3 10 5 1 1 1 1 2 3 r7 tsutaj ACPC 2019 Day3 G 2019/9/20 10 / 13
  • 11. 想定解法 2. の操作はこういうイメージ 3 5 2 1 2 1 1 3 7 5 1 1 1 1 2 3 r c11 tsutaj ACPC 2019 Day3 G 2019/9/20 11 / 13
  • 12. 想定解法 ▶ v1, v2 の更新は区間和が扱えるデータ構造 (SegmentTree など) を使 いながらやるとできます ▶ 自分と辺で直接接続している頂点の vector を、頂点番号の昇順に持つ ▶ 自分の親である頂点を無視する必要があるが、v1 = 0, v2 = false とし て扱うと若干処理しやすいかも? ▶ それぞれの rerooting に O(log N) かかるため、全体で O(N log N) で解けます その他 ▶ 工夫次第だと思いますが、実装はだいぶ重いと思います ▶ 抽象化された全方位木 DP ライブラリは使えるのでしょうか? 今回の 問題において左・右の累積でどうにかする戦略はおそらく使えないの で、きびしいだろうと思っていました tsutaj ACPC 2019 Day3 G 2019/9/20 12 / 13
  • 13. Writer 解・統計 ▶ Tester 解 ▶ tsutaj (C++・241 行・8013 bytes) ▶ rsk0315 (C++・376 行・10979 bytes) ▶ 統計 ▶ AC / tried: 2 / 9 (22.2 %) ▶ First AC ▶ On-site: ACPC_sakenichia (165 min 27 sec) ▶ On-line: lyrically (123 min 1 sec) tsutaj ACPC 2019 Day3 G 2019/9/20 13 / 13