SlideShare a Scribd company logo
1 of 9
Download to read offline
RUPC 2019 Day 3
G 問題
- Donuts Orientation -
原案:tsukasa_diary
問題文:tsuta_j
解説:tsukasa_diary
2019/3/7 RUPC 2019 DAY 3 G 1
問題
2𝑁頂点のドーナツ型無向グラフが与えられる。各辺に
向き付けするとき、閉路ができない向き付けは何通り
あるか。(𝑁 ≤ 1000, 答えは素数𝑀で剰余を取る)
2019/3/7 RUPC 2019 DAY 3 G 2
1
2
342N-1 2N
2i
2i-1
1
2
3465
基本的なアルゴリズム
メモ化再帰
◦ 各辺を順に向き付けていく
◦ 頂点の推移閉包をメモ
2019/3/7 RUPC 2019 DAY 3 G 3
1
2
3465
𝒔/𝒕 1 2 3 4 5 6
1 0 1 1 1 0 0
2 0 0 1 1 0 0
3 0 0 0 0 0 0
4 0 0 1 0 0 0
5 0 0 0 0 0 0
6 0 0 0 0 0 0
0: 𝑠から𝑡へ推移不可能 1: 𝑠から𝑡へ推移可能
rec(𝑖, 𝑐𝑢𝑟): // 辺 𝑢𝑖, 𝑣𝑖 に向き付けする
if (閉路を検出) return 0
if (𝑖 = 𝑙𝑎𝑠𝑡) return 1
if ( 𝑖, 𝑐𝑢𝑟 がメモ済み) return 𝑚𝑒𝑚𝑜[𝑖, 𝑐𝑢𝑟]
𝑛𝑥𝑡1 ← 𝑎𝑑𝑑𝐴𝑟𝑐 𝑐𝑢𝑟, 𝑢𝑖 → 𝑣𝑖
𝑛𝑥𝑡2 ← 𝑎𝑑𝑑𝐴𝑟𝑐 𝑐𝑢𝑟, 𝑣𝑖 → 𝑢𝑖
𝑚𝑒𝑚𝑜 𝑖, 𝑐𝑢𝑟 ←(rec(𝑖+1, 𝑛𝑥𝑡1) + rec(𝑖+1, 𝑛𝑥𝑡2))%𝑀
return 𝑚𝑒𝑚𝑜 𝑖, 𝑐𝑢𝑟
𝒔/𝒕 1 2 3 4 5 6
1 0 1 1 1 0 0
2 0 0 1 1 0 0
3 0 0 0 0 0 0
4 0 0 1 0 0 0
5 0 0 0 0 0 0
6 0 0 0 0 0 0
0: 𝑠から𝑡へ推移不可能 1: 𝑠から𝑡へ推移可能
明らかな問題点
頂点数が2𝑁だから推移閉包のサイズが4𝑁2
◦ 推移閉包の種類数は𝑂 2 𝑁2
◦ 総計算量は𝑂 𝑁32 𝑁2
2019/3/7 RUPC 2019 DAY 3 G 4
これをメモするのは
非現実的
考察の前準備
とりあえずグラフを見やすい形に描きなおす
2019/3/7 RUPC 2019 DAY 3 G 5
1 2
3 4
5 6
1
2
3465
梯子(幅2のグリッド)の上下がくっついただけ
重要な考察
上の辺から順に向き付けるとき、向き付けが完了した
領域の四隅頂点以外の推移関係は無視してよい
2019/3/7 RUPC 2019 DAY 3 G 6
𝒔/𝒕 1 2 3 4 5 6
1 0 1 1 0 1 0
2 0 0 0 0 0 0
3 0 0 0 1 1 0
4 0 1 1 0 1 0
5 0 0 0 0 0 0
6 0 1 1 1 1 0
0: 𝑠から𝑡へ推移不可能 1: 𝑠から𝑡へ推移可能
無視
ここは最後に
向き付け
ここは最後に
向き付け
1 2
3 4
5 6
重要な考察
上の辺から順に向き付けるとき、向き付けが完了した
領域の四隅頂点以外の推移関係は無視してよい
2019/3/7 RUPC 2019 DAY 3 G 7
1 2
3 4
5 6
なぜ?
• 四隅頂点の集合を 𝐹とする
• サイクル検出について
• ある頂点 𝑣 ∉ 𝐹 について、辺 𝑥, 𝑦 を向き付けして 𝑣
を含むサイクルができるとき、必ず 𝑥, 𝑦 ∈ 𝐹 であって
𝑦 → 𝑣 → 𝑥 という推移関係がある
• しかし、 𝑦 → 𝑣 → 𝑥 から 𝑦 → 𝑥 という推移関係が導
かれるので、 𝑣 を無視しても正しくサイクル検出可能
• 推移関係の更新についても同様に議論可能
6 → 3 → 5
想定解法まとめ
四隅頂点に関する推移閉包を管理するメモ化再帰
◦ 計算量は 𝑂 𝑁 × 42
× 推移閉包の種類数
◦ 4頂点の推移閉包の種類数は 3994(参考:OEIS A006905)
推移閉包の管理が強実装
◦ 四隅が動くので行と列が目まぐるしく変わる
◦ よく考えると以下の 3 操作でうまく実現できる
◦ ワーシャル・フロイド的に更新する (辺追加は3乗でなく2乗でできます)
◦ ある行を全部 0 にする
◦ ある列を全部 0 にする
2019/3/7 RUPC 2019 DAY 3 G 8
詳細は割愛
Writer Solutions / Statistics
Writer Solutions
tsukasa diary: 85 lines, 2654 bytes in C++
tsuta j: 133 lines, 3718 bytes in C++
Acceptance / Submission
80 % (4/5)
First Acceptance
On-site: rupc ohauku (162 min)
On-line: rickytheta (133 min)

More Related Content

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

More from 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 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: 情報検索
 
最大流 (max flow)
最大流 (max flow)最大流 (max flow)
最大流 (max flow)
 

Recently uploaded

Recently uploaded (7)

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の勉強会で発表されたものです。
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
新人研修 後半 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 発表資料)
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 

RUPC 2019 Day3 G: Donuts Orientation