SlideShare une entreprise Scribd logo
1  sur  40
Télécharger pour lire hors ligne
蟻本輪講 データ構造(P69~86)	
2014 / 6 / 11
アルゴリズム研究室 B4 竹内文登
データ構造	
•  データ構造とは、データの持ち方のこと。
•  データの持ち方によって、効率的な操作方法が変わる。
•  例
•  「配列」
•  「スタック」
•  「キュー」
•  「ヒープ」
•  「二分探索木」
•  「Union-Find木」 
目次	
•  木・二分木
•  プライオリティキューとヒープ
•  仕組みと計算量
•  実装例
•  問題(2つ)
•  二分探索木
•  仕組みと計算量
•  実装例
•  (平衡二分木)
•  Union-Find木
•  仕組みと計算量
•  実装例
•  問題
目次	
•  木・二分木
•  プライオリティキューとヒープ
•  仕組みと計算量
•  実装例
•  問題(2つ)
•  二分探索木
•  仕組みと計算量
•  実装例
•  (平衡二分木)
•  Union-Find木
•  仕組みと計算量
•  実装例
•  問題
木・二分木 	
根	
辺	
ノード	
葉	
親	
子	
兄弟	
「二分木」とは、すべてのノードについて子が2個以下である木。
目次	
•  木・二分木
•  プライオリティキューとヒープ
•  仕組みと計算量
•  実装例
•  問題(2つ)
•  二分探索木
•  仕組みと計算量
•  実装例
•  (平衡二分木)
•  Union-Find木
•  仕組みと計算量
•  実装例
•  問題
プライオリティキュー(順位キュー)	
•  数を追加する。
•  最小の数値を取り出す(値を取得し、削除する)。	
1 5 4	
 1 5 4 3	
3を追加	
1 5 4	
 5 4 	
1を取り出す	
1
ヒープ	
•  二分木を用いて実装したもの。
•  子の数字は親の数字より大きい
•  上から下へ、左から右へ順にノード
が詰まっている	
1	
2	
 4	
7	
 8	
 5
ヒープ ー数字の追加ー	
1	
2	
 4	
7	
 8	
 5	
 3	
1	
2	
 3	
7	
 8	
 5	
 4	
一番下の段の出来るだけ左に
ノードを追加。	
逆転が無くなるまで上に
上げて行く	
逆転
ヒープ ー最小値の取り出しー	
5	
2	
 4	
7	
 8	
 5	
1	
最小値	
最小値(根)を取り出し、
最後尾のノードを根にコピーする。	
逆転	
逆転	
2	
5	
 4	
7	
 8	
逆転が無くなるまで下に下げる。
2つの子が両方逆転している時は、
小さい方と交換。
ヒープの操作の計算量	
•  数字の追加
最悪の場合、根まで交換が必要。
➡木の深さに比例した時間 = O( log n )
•  最小値の取り出し
最悪の場合、一番下の段まで交換が必要。
➡木の深さに比例した時間 = O( log n )
ヒープの実装例	
•  二分木をポインタで表現するのではなく、配列で実装。
•  左の子は自分の番号×2+1
•  右の子は自分の番号×2+2
0	
1	
 2	
3	
 4	
 5	
 6	
0 1 2 3 4 5 6 7
ヒープの実装例	
•  蟻本p71-72 参照
•  void push(int x) : 数の追加
•  int pop() : 最小値の取り出し
•  標準ライブラリ(C++)
•  最大値から出てくるので注意!!
•  標準ライブラリ (C++の場合)
#include <queue>
#include <iostream>
using namespace std;
int main(){
priority_queue<int> pque;
pque.push(3); 3の追加
pque.push(5); ; 5の追加
cout << pque.top(); ; の追加
pque.pop();
return 0;
}
問題 Expedition(POJ 2431)	
10	
 100	
 50	
L
•  距離Lの道を移動する。
•  はじめガソリンはP積まれている。
•  距離1走るとガソリンを1消費。
•  途中N個のガソリンスタンドがある。
•  各スタンド i は、距離Aiの位置にあり、Biのガソリンを補給可能。
•  トラックのガソリンタンクに制限はない。
•  このとき、車は移動を完了できるか?出来る場合は最小の補給回数を出力し、
  出来ない場合は-1を出力せよ。
•  制約
1≦N≦10000, 1≦L≦1000000, 1≦P≦1000000, 1≦Ai<L, 1≦Bi≦100
解法	
•  愚直な解法
 N個のガソリンスタンドに対して補給するかしないかを全探索
 ➡O( 2N )の計算量。
•  効率的な解法
ガソリンが無くなったとき、今まで通ったガソリンスタンドのうち、(補給していな
い)補給できる量の最も大きいスタンドで補給すればよい。
	
10	
 100	
 50	
L
ガソリン 0	
補給したことにする
解法 	
•  プライオリティキューを用いて実装
•  ガソリンスタンドを通過した時に、プライオリティキューにBiを追加
•  燃料タンクが空になったとき、
•  プライオリティが空であれば、到達できない。
•  プライオリティキューから最大の値を取り出して、そこで補給したことにする。
*コードはp74参照。
問題 Fence Repair	
•  長さL1+ ... +LNをN個に切り出す。
•  切り出す板の長さは、L1, ... , LN
•  板を切断する際、板の長さ分のコストがかかる。
•  最小でどれだけのコストで切り出すことができるか?
•  制約
•  1≦N≦20000, 1≦Li≦50000
問題 Fence Repair	
15	
8	
 7	
5	
 3	
 4	
 3	
2	
 1	
15コスト	
7コスト	
8コスト	
3コスト	
計 33コスト
解法 	
•  愚直な解法
•  O( N2 )の計算量。
•  効率的な解法
•  板の集合から最も短い2つの板を取り出し、長さが和になる新しい板を
板の集合に追加すればよく、プライオリティキューで実装可能。
•  O( log N )の操作を、O( N )回実行 ➡ O( N log N )
•  *コードはp75参照。
目次	
•  木・二分木
•  プライオリティキューとヒープ
•  仕組みと計算量
•  実装例
•  問題(2つ)
•  二分探索木
•  仕組みと計算量
•  実装例
•  (平衡二分木)
•  Union-Find木
•  仕組みと計算量
•  実装例
•  問題
二分探索木 	
•  二分探索木は以下の操作を効率的に行うデータ構造である。
•  ある数値が含まれているか調べる。 (探索)
•  数値を追加する。
•  ある数値を削除する。
•  *実装によって他にも様々な操作が行える。➡応用力が高い。
二分探索木 ー探索ー	
7	
2	
 15	
1	
 5	
 10	
 17	
4	
 8	
 11	
 16	
 19	
10があるか探索する。	
 7と比較 	
15と比較	
発見!
二分探索木 ー数の追加ー	
7	
2	
 15	
1	
 5	
 10	
 17	
4	
 8	
 11	
 16	
 19	
6を追加する。	
 7と比較 	
2と比較	
6	
5と比較	
空き➡追加!
二分探索木 ー削除ー	
•  以下のような場合分けが必要である。
1.  削除したいノードが左の子を持っていない場合、右の子を持ってくる
2.  削除したいノードの左の子が右の子をもっていなければ、左の子を
持ってくる
3.  どちらでもなければ、左の子以下で最も大きいノードを持ってくる。	
15	
17	
15	
10	
8	
15	
10	
8	
 11
二分探索木 ー削除1ー	
7	
2	
 15	
1	
 5	
 10	
 17	
4	
 8	
 11	
 16	
 19	
10があるか探索する。	
 7と比較 	
15と比較	
発見!
二分探索木の計算量	
•  どの操作も木の深さに比例した時間がかかる。
•  ➡平均的には、ノード数 n に対して、O( log n )時間。
二分探索木の実装例	
•  *蟻本p77-78参照。
•  標準ライブラリ(C++)
•  →set
•  →map
•  平衡二分木
•  標準ライブラリに備わっている二分木は平衡二分木になっている!
目次	
•  木・二分木
•  プライオリティキューとヒープ
•  仕組みと計算量
•  実装例
•  問題(2つ)
•  二分探索木
•  仕組みと計算量
•  実装例
•  (平衡二分木)
•  Union-Find木
•  仕組みと計算量
•  実装例
•  問題
Union-Find木	
•  Union-Find木は、グループ分けを管理するデータ構造。
•  次の操作が行える。
•  要素aと要素bが同じグループに属するか調べる
•  要素aと要素bのグループを併合する
•  (分割はできない)	
1 2 5	
3	
4 6 7	
調べる	
2と5 → 同じグループ	
2と4 → 違うグループ	
併合	
1 2 3 5	
4 6 7
Union-Find木 ー仕組みー	
•  1つのグループに対して1つの木を構成する。
•  木の形などは本質的でなく、木であることが重要。	
1	
2	
 5	
3	
 6	
4	
7
Union-Find木 ー初期化ー	
•  n個の要素に対して、n個のノードを用意する
•  辺はない	
1	
 2	
 3	
 4	
 5
Union-Find木 ー併合ー	
1	
 2	
1	
2	
1	
2	
 5	
6	
4	
7	
6	
4	
7	
1	
2	
 5
Union-Find木 ー判定ー	
•  要素aと要素bが同じグループに属するか調べる
•  木を上向きに辿り、木の根を調べ、同じ根にたどり着くか調べる
1	
2	
 5	
3	
 6	
4	
7
Union-Find木 ー実装の注意ー	
•  偏りが発生しないようにする。
•  木の高さ( rank )を記憶しておく。
•  併合の際に2つの木のrankが異なれば、rankの小さいものから大きい
ものへ辺を張る。	
1	
2	
 5	
6	
4	
7	
6	
4	
7	
1	
2	
 5	
高さ1	
 高さ2	
 高さ2
Union-Find木 ー辺の縮約ー	
6	
4	
7	
7	
 6	
の根は	
6	
4	
 7	
直接根に繋ぐ
Union-Find木 ー辺の縮約ー	
1	
2	
3	
4	
5	
1	
2	
 3	
 4	
 5	
すべて縮約	
*簡単のため、rankは変えない。
Union-Find木 ー計算量と実装ー	
•  平均はO( α( n ) )らしい、、、
•  アッカーマン関数Aの、f( n ) = A( n, n ) の逆関数
•  実装
•  *p84参照
問題 食物連鎖 ( POJ 1182 )	
•  N匹の動物、1, … , Nがいる
•  動物はすべて3つの種類 A, B, C のいずれか
•  A は B を食べ、B は C を食べ、 C は Aを食べる
•  次の2種類の情報がk個与えられる
•  タイプ1: x と y は同じ種類です
•  タイプ2:x は y を食べます
•  k個の情報は全て正しいと限らず、誤った情報(以前の情報に矛盾する
ものや、誤った番号など)も含まれている
•  k個の情報のうち、誤った情報の個数を出力せよ
•  制約
•  1<= N <= 50000
•  0 <= k <= 100000
解法	
•  各動物 i に対して、i-A, i-B, i-C を作り、3×N個の要素で
Union-Findを作る。
•  i-X は「 i が種類Xである場合」を表す。
•  各情報に対して、矛盾が起きているかを調べ、
•  起きていなければ、以下の操作を行う。
•  タイプ1: x と y は同じ種類
•  → 「x-Aとy-A」、「x-Bとy-B」、「x-Cとy-C」の3つのペアを併合
•  タイプ2:x は y を食べる
•  → 「x-Aとy-B」、「x-Bとy-C」、「x-Cとy-A」の3つのペアを併合
•  *コードはp86参照

Contenu connexe

Tendances

AtCoder Regular Contest 039 解説
AtCoder Regular Contest 039 解説AtCoder Regular Contest 039 解説
AtCoder Regular Contest 039 解説AtCoder Inc.
 
強化学習その3
強化学習その3強化学習その3
強化学習その3nishio
 
AtCoder Regular Contest 044 解説
AtCoder Regular Contest 044 解説AtCoder Regular Contest 044 解説
AtCoder Regular Contest 044 解説AtCoder Inc.
 
Rolling Hashを殺す話
Rolling Hashを殺す話Rolling Hashを殺す話
Rolling Hashを殺す話Nagisa Eto
 
ノンパラベイズ入門の入門
ノンパラベイズ入門の入門ノンパラベイズ入門の入門
ノンパラベイズ入門の入門Shuyo Nakatani
 
シリーズML-07 ニューラルネットワークによる非線形回帰
シリーズML-07 ニューラルネットワークによる非線形回帰シリーズML-07 ニューラルネットワークによる非線形回帰
シリーズML-07 ニューラルネットワークによる非線形回帰Katsuhiro Morishita
 
AtCoder Beginner Contest 002 解説
AtCoder Beginner Contest 002 解説AtCoder Beginner Contest 002 解説
AtCoder Beginner Contest 002 解説AtCoder Inc.
 
DDPC 2016 予選 解説
DDPC 2016 予選 解説DDPC 2016 予選 解説
DDPC 2016 予選 解説AtCoder Inc.
 
LCA and RMQ ~簡潔もあるよ!~
LCA and RMQ ~簡潔もあるよ!~LCA and RMQ ~簡潔もあるよ!~
LCA and RMQ ~簡潔もあるよ!~Yuma Inoue
 
AtCoder Beginner Contest 034 解説
AtCoder Beginner Contest 034 解説AtCoder Beginner Contest 034 解説
AtCoder Beginner Contest 034 解説AtCoder Inc.
 
色々なダイクストラ高速化
色々なダイクストラ高速化色々なダイクストラ高速化
色々なダイクストラ高速化yosupo
 
競技プログラミングにおけるコードの書き方とその利便性
競技プログラミングにおけるコードの書き方とその利便性競技プログラミングにおけるコードの書き方とその利便性
競技プログラミングにおけるコードの書き方とその利便性Hibiki Yamashiro
 
CODE FESTIVAL 2014 本選 解説
CODE FESTIVAL 2014 本選 解説CODE FESTIVAL 2014 本選 解説
CODE FESTIVAL 2014 本選 解説AtCoder Inc.
 
Indeedなう 予選B 解説
Indeedなう 予選B 解説Indeedなう 予選B 解説
Indeedなう 予選B 解説AtCoder Inc.
 
ベイズ統計学の概論的紹介
ベイズ統計学の概論的紹介ベイズ統計学の概論的紹介
ベイズ統計学の概論的紹介Naoki Hayashi
 

Tendances (20)

Za atsu-20170328
Za atsu-20170328Za atsu-20170328
Za atsu-20170328
 
AtCoder Regular Contest 039 解説
AtCoder Regular Contest 039 解説AtCoder Regular Contest 039 解説
AtCoder Regular Contest 039 解説
 
Binary indexed tree
Binary indexed treeBinary indexed tree
Binary indexed tree
 
強化学習その3
強化学習その3強化学習その3
強化学習その3
 
AtCoder Regular Contest 044 解説
AtCoder Regular Contest 044 解説AtCoder Regular Contest 044 解説
AtCoder Regular Contest 044 解説
 
動的計画法を極める!
動的計画法を極める!動的計画法を極める!
動的計画法を極める!
 
Rolling Hashを殺す話
Rolling Hashを殺す話Rolling Hashを殺す話
Rolling Hashを殺す話
 
ノンパラベイズ入門の入門
ノンパラベイズ入門の入門ノンパラベイズ入門の入門
ノンパラベイズ入門の入門
 
シリーズML-07 ニューラルネットワークによる非線形回帰
シリーズML-07 ニューラルネットワークによる非線形回帰シリーズML-07 ニューラルネットワークによる非線形回帰
シリーズML-07 ニューラルネットワークによる非線形回帰
 
AtCoder Beginner Contest 002 解説
AtCoder Beginner Contest 002 解説AtCoder Beginner Contest 002 解説
AtCoder Beginner Contest 002 解説
 
DDPC 2016 予選 解説
DDPC 2016 予選 解説DDPC 2016 予選 解説
DDPC 2016 予選 解説
 
全域木いろいろ
全域木いろいろ全域木いろいろ
全域木いろいろ
 
Topological sort
Topological sortTopological sort
Topological sort
 
LCA and RMQ ~簡潔もあるよ!~
LCA and RMQ ~簡潔もあるよ!~LCA and RMQ ~簡潔もあるよ!~
LCA and RMQ ~簡潔もあるよ!~
 
AtCoder Beginner Contest 034 解説
AtCoder Beginner Contest 034 解説AtCoder Beginner Contest 034 解説
AtCoder Beginner Contest 034 解説
 
色々なダイクストラ高速化
色々なダイクストラ高速化色々なダイクストラ高速化
色々なダイクストラ高速化
 
競技プログラミングにおけるコードの書き方とその利便性
競技プログラミングにおけるコードの書き方とその利便性競技プログラミングにおけるコードの書き方とその利便性
競技プログラミングにおけるコードの書き方とその利便性
 
CODE FESTIVAL 2014 本選 解説
CODE FESTIVAL 2014 本選 解説CODE FESTIVAL 2014 本選 解説
CODE FESTIVAL 2014 本選 解説
 
Indeedなう 予選B 解説
Indeedなう 予選B 解説Indeedなう 予選B 解説
Indeedなう 予選B 解説
 
ベイズ統計学の概論的紹介
ベイズ統計学の概論的紹介ベイズ統計学の概論的紹介
ベイズ統計学の概論的紹介
 

En vedette

Chokudai Contest 001
Chokudai Contest 001Chokudai Contest 001
Chokudai Contest 001AtCoder Inc.
 
AtCoder Beginner Contest 035 解説
AtCoder Beginner Contest 035 解説AtCoder Beginner Contest 035 解説
AtCoder Beginner Contest 035 解説AtCoder Inc.
 
深さ優先探索による塗りつぶし
深さ優先探索による塗りつぶし深さ優先探索による塗りつぶし
深さ優先探索による塗りつぶしAtCoder Inc.
 
高速フーリエ変換
高速フーリエ変換高速フーリエ変換
高速フーリエ変換AtCoder Inc.
 
大規模グラフアルゴリズムの最先端
大規模グラフアルゴリズムの最先端大規模グラフアルゴリズムの最先端
大規模グラフアルゴリズムの最先端Takuya Akiba
 
The FizzBuzz Programing Contest
The FizzBuzz Programing ContestThe FizzBuzz Programing Contest
The FizzBuzz Programing ContestJunichi Ito
 
Learning Convolutional Neural Networks for Graphs
Learning Convolutional Neural Networks for GraphsLearning Convolutional Neural Networks for Graphs
Learning Convolutional Neural Networks for GraphsTakuya Akiba
 
オブジェクト指向エクササイズのススメ
オブジェクト指向エクササイズのススメオブジェクト指向エクササイズのススメ
オブジェクト指向エクササイズのススメYoji Kanno
 
Kubernetesを触ってみた
Kubernetesを触ってみたKubernetesを触ってみた
Kubernetesを触ってみたKazuto Kusama
 
AtCoder Beginner Contest 030 解説
AtCoder Beginner Contest 030 解説AtCoder Beginner Contest 030 解説
AtCoder Beginner Contest 030 解説AtCoder Inc.
 
AtCoder Beginner Contest 033 解説
AtCoder Beginner Contest 033 解説AtCoder Beginner Contest 033 解説
AtCoder Beginner Contest 033 解説AtCoder Inc.
 
AtCoderに毎回参加したくなる仕組み
AtCoderに毎回参加したくなる仕組みAtCoderに毎回参加したくなる仕組み
AtCoderに毎回参加したくなる仕組みAtCoder Inc.
 
オブジェクト指向できていますか?
オブジェクト指向できていますか?オブジェクト指向できていますか?
オブジェクト指向できていますか?Moriharu Ohzu
 
大規模グラフ解析のための乱択スケッチ技法
大規模グラフ解析のための乱択スケッチ技法大規模グラフ解析のための乱択スケッチ技法
大規模グラフ解析のための乱択スケッチ技法Takuya Akiba
 
オブジェクト指向の設計と実装の学び方のコツ
オブジェクト指向の設計と実装の学び方のコツオブジェクト指向の設計と実装の学び方のコツ
オブジェクト指向の設計と実装の学び方のコツ増田 亨
 

En vedette (20)

最短経路問題 & 最小全域木
最短経路問題 & 最小全域木最短経路問題 & 最小全域木
最短経路問題 & 最小全域木
 
abc031
abc031abc031
abc031
 
At corder005
At corder005At corder005
At corder005
 
初めてのプロコン
初めてのプロコン初めてのプロコン
初めてのプロコン
 
Chokudai Contest 001
Chokudai Contest 001Chokudai Contest 001
Chokudai Contest 001
 
abc032
abc032abc032
abc032
 
AtCoder Beginner Contest 035 解説
AtCoder Beginner Contest 035 解説AtCoder Beginner Contest 035 解説
AtCoder Beginner Contest 035 解説
 
深さ優先探索による塗りつぶし
深さ優先探索による塗りつぶし深さ優先探索による塗りつぶし
深さ優先探索による塗りつぶし
 
高速フーリエ変換
高速フーリエ変換高速フーリエ変換
高速フーリエ変換
 
大規模グラフアルゴリズムの最先端
大規模グラフアルゴリズムの最先端大規模グラフアルゴリズムの最先端
大規模グラフアルゴリズムの最先端
 
The FizzBuzz Programing Contest
The FizzBuzz Programing ContestThe FizzBuzz Programing Contest
The FizzBuzz Programing Contest
 
Learning Convolutional Neural Networks for Graphs
Learning Convolutional Neural Networks for GraphsLearning Convolutional Neural Networks for Graphs
Learning Convolutional Neural Networks for Graphs
 
オブジェクト指向エクササイズのススメ
オブジェクト指向エクササイズのススメオブジェクト指向エクササイズのススメ
オブジェクト指向エクササイズのススメ
 
Kubernetesを触ってみた
Kubernetesを触ってみたKubernetesを触ってみた
Kubernetesを触ってみた
 
AtCoder Beginner Contest 030 解説
AtCoder Beginner Contest 030 解説AtCoder Beginner Contest 030 解説
AtCoder Beginner Contest 030 解説
 
AtCoder Beginner Contest 033 解説
AtCoder Beginner Contest 033 解説AtCoder Beginner Contest 033 解説
AtCoder Beginner Contest 033 解説
 
AtCoderに毎回参加したくなる仕組み
AtCoderに毎回参加したくなる仕組みAtCoderに毎回参加したくなる仕組み
AtCoderに毎回参加したくなる仕組み
 
オブジェクト指向できていますか?
オブジェクト指向できていますか?オブジェクト指向できていますか?
オブジェクト指向できていますか?
 
大規模グラフ解析のための乱択スケッチ技法
大規模グラフ解析のための乱択スケッチ技法大規模グラフ解析のための乱択スケッチ技法
大規模グラフ解析のための乱択スケッチ技法
 
オブジェクト指向の設計と実装の学び方のコツ
オブジェクト指向の設計と実装の学び方のコツオブジェクト指向の設計と実装の学び方のコツ
オブジェクト指向の設計と実装の学び方のコツ
 

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

Plus de 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 G: Restricted DFS
ACPC 2019 Day3 G: Restricted DFSACPC 2019 Day3 G: Restricted DFS
ACPC 2019 Day3 G: Restricted DFS
 
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 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
 

蟻本輪講 データ構造