SlideShare una empresa de Scribd logo
1 de 6
Descargar para leer sin conexión
北大合宿 2019 Day1 G 問題
トレジャーハンター (Treasure Hunter)
原案: tsutaj
問題文: tsutaj
解答: tsutaj
解説: tsutaj
2019 年 7 月 14 日
tsutaj HUPC 2019 Day1 G 2019/7/14 1 / 6
問題
トレジャーハンター (Treasure Hunter)
各頂点に価値 pi 、各辺に重み wi がついた木 T = (V, E) がある
頂点 u と v を結ぶ辺を (u, v)、その重み w を weight((u, v)) = w と
表記
与えられた木の部分木 T′ = (V ′, E′), V ′ ⊆ V, E′ ⊆ E であって、以下
の条件を満たすものの中で、部分木に含まれる頂点の価値の合計を最
大化せよ
T′
は連結∑
e∈E′ weight(e) ≤ W
制約
1 ≤ N ≤ 102
1 ≤ W ≤ 105
1 ≤ pi ≤ 109
1 ≤ wi ≤ 105
与えられるグラフは木である
tsutaj HUPC 2019 Day1 G 2019/7/14 2 / 6
想定誤解法
TLE 解法: 普通の木 DP
適当に根を決めて根付き木にする
dp[i][j] (以下の状態を管理)
i 番目の頂点までで
切った辺の重みの総和が j であるときの価値最大
親側と子側の情報をマージするとき、重みの総和について 2 重ループ
が必要
全体で O(NW2) 必要となり TLE
map などを用いて値が入ってるところだけ覚えても通らないと思います
tsutaj HUPC 2019 Day1 G 2019/7/14 3 / 6
想定解法
想定解法: 再帰動的計画法 (DFS しながら DP)
再帰動的計画法
[Xt, Xf ] = recDP(v, X)
引数 (input)
v (頂点 id)
X (関数を呼んだ時点でのナップザックの状態を表す配列)
返り値 (output)
Xt (頂点 v を使用した時のナップザックの状態を表す配列)
Xf (頂点 v を使用しなかった時のナップザックの状態を表す配列)
適当に根を決めて根付き木にする
根から、その時点までのナップザックの状態を持って DFS
子について DFS を呼んで得られた結果をもとに、ナップザックの状態
を更新
その頂点を使用する / 使用しない ときにできる状態更新遷移が異なる
ので、それに注意しながら実装
tsutaj HUPC 2019 Day1 G 2019/7/14 4 / 6
出典
このテクニックは昨年出た論文 “Linear Pseudo-Polynomial Factor
Algorithm for Automaton Constrained Tree Knapsack Problem” Link
に記載されているものです
著者である tmaehara 先生が Qiita に解説記事を書いています (さわり
の部分を理解するには良い資料) Link
これの Example 3 (Connectivity Constrained Problem) を参考に作りま
した
辺に制約があるのでちょっと工夫しないと答えが合わないので注意
独立集合制約・優先順位制約・連結制約・k 個の連結制約などなど・・・
汎用的に使えるテクニックのようです
これを実装すると O(Nlog2 3W) でこの問題が解け、AC できます
重心分解をすると O(NW log W) も達成可能のようです
去年の ICPC 国内予選 H でも似たような問題が出ているので出してみ
ました
tsutaj HUPC 2019 Day1 G 2019/7/14 5 / 6
Writer 解・統計
Writer 解
tsutaj (C++・101 行・2862 bytes)
統計
AC / tried: 2 / 34 (5.9 %)
First AC
On-site: なし
On-line: ushitapunichiakun (126 min 51 sec)
tsutaj HUPC 2019 Day1 G 2019/7/14 6 / 6

Más contenido relacionado

Más de HCPC: 北海道大学競技プログラミングサークル

Más de HCPC: 北海道大学競技プログラミングサークル (20)

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 F: MOD Rush
HUPC 2019 Day2 F: MOD RushHUPC 2019 Day2 F: MOD Rush
HUPC 2019 Day2 F: MOD Rush
 
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
 
RUPC 2019 Day3 D: 矢
RUPC 2019 Day3 D: 矢RUPC 2019 Day3 D: 矢
RUPC 2019 Day3 D: 矢
 
RUPC 2019 Day3 F: 赤黒そーるじぇむ
RUPC 2019 Day3 F: 赤黒そーるじぇむRUPC 2019 Day3 F: 赤黒そーるじぇむ
RUPC 2019 Day3 F: 赤黒そーるじぇむ
 
RUPC 2019 Day3 E: 往復文字列
RUPC 2019 Day3 E: 往復文字列RUPC 2019 Day3 E: 往復文字列
RUPC 2019 Day3 E: 往復文字列
 
RUPC 2019 Day3 C: 約数ゲーム
RUPC 2019 Day3 C: 約数ゲームRUPC 2019 Day3 C: 約数ゲーム
RUPC 2019 Day3 C: 約数ゲーム
 
RUPC 2019 Day3 B: 括弧を語る数
RUPC 2019 Day3 B: 括弧を語る数RUPC 2019 Day3 B: 括弧を語る数
RUPC 2019 Day3 B: 括弧を語る数
 
RUPC 2019 Day3 A: 情報検索
RUPC 2019 Day3 A: 情報検索RUPC 2019 Day3 A: 情報検索
RUPC 2019 Day3 A: 情報検索
 

Último

論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNetToru Tamaki
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Yuma Ohgami
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものですiPride Co., Ltd.
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...Toru Tamaki
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A surveyToru Tamaki
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Danieldanielhu54
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdftaisei2219
 

Último (9)

論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
 

HUPC 2019 Day1 G: トレジャーハンター

  • 1. 北大合宿 2019 Day1 G 問題 トレジャーハンター (Treasure Hunter) 原案: tsutaj 問題文: tsutaj 解答: tsutaj 解説: tsutaj 2019 年 7 月 14 日 tsutaj HUPC 2019 Day1 G 2019/7/14 1 / 6
  • 2. 問題 トレジャーハンター (Treasure Hunter) 各頂点に価値 pi 、各辺に重み wi がついた木 T = (V, E) がある 頂点 u と v を結ぶ辺を (u, v)、その重み w を weight((u, v)) = w と 表記 与えられた木の部分木 T′ = (V ′, E′), V ′ ⊆ V, E′ ⊆ E であって、以下 の条件を満たすものの中で、部分木に含まれる頂点の価値の合計を最 大化せよ T′ は連結∑ e∈E′ weight(e) ≤ W 制約 1 ≤ N ≤ 102 1 ≤ W ≤ 105 1 ≤ pi ≤ 109 1 ≤ wi ≤ 105 与えられるグラフは木である tsutaj HUPC 2019 Day1 G 2019/7/14 2 / 6
  • 3. 想定誤解法 TLE 解法: 普通の木 DP 適当に根を決めて根付き木にする dp[i][j] (以下の状態を管理) i 番目の頂点までで 切った辺の重みの総和が j であるときの価値最大 親側と子側の情報をマージするとき、重みの総和について 2 重ループ が必要 全体で O(NW2) 必要となり TLE map などを用いて値が入ってるところだけ覚えても通らないと思います tsutaj HUPC 2019 Day1 G 2019/7/14 3 / 6
  • 4. 想定解法 想定解法: 再帰動的計画法 (DFS しながら DP) 再帰動的計画法 [Xt, Xf ] = recDP(v, X) 引数 (input) v (頂点 id) X (関数を呼んだ時点でのナップザックの状態を表す配列) 返り値 (output) Xt (頂点 v を使用した時のナップザックの状態を表す配列) Xf (頂点 v を使用しなかった時のナップザックの状態を表す配列) 適当に根を決めて根付き木にする 根から、その時点までのナップザックの状態を持って DFS 子について DFS を呼んで得られた結果をもとに、ナップザックの状態 を更新 その頂点を使用する / 使用しない ときにできる状態更新遷移が異なる ので、それに注意しながら実装 tsutaj HUPC 2019 Day1 G 2019/7/14 4 / 6
  • 5. 出典 このテクニックは昨年出た論文 “Linear Pseudo-Polynomial Factor Algorithm for Automaton Constrained Tree Knapsack Problem” Link に記載されているものです 著者である tmaehara 先生が Qiita に解説記事を書いています (さわり の部分を理解するには良い資料) Link これの Example 3 (Connectivity Constrained Problem) を参考に作りま した 辺に制約があるのでちょっと工夫しないと答えが合わないので注意 独立集合制約・優先順位制約・連結制約・k 個の連結制約などなど・・・ 汎用的に使えるテクニックのようです これを実装すると O(Nlog2 3W) でこの問題が解け、AC できます 重心分解をすると O(NW log W) も達成可能のようです 去年の ICPC 国内予選 H でも似たような問題が出ているので出してみ ました tsutaj HUPC 2019 Day1 G 2019/7/14 5 / 6
  • 6. Writer 解・統計 Writer 解 tsutaj (C++・101 行・2862 bytes) 統計 AC / tried: 2 / 34 (5.9 %) First AC On-site: なし On-line: ushitapunichiakun (126 min 51 sec) tsutaj HUPC 2019 Day1 G 2019/7/14 6 / 6