SlideShare a Scribd company logo
1 of 40
Download to read offline
蟻本輪講 データ構造(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参照

More Related Content

What's hot

Union find(素集合データ構造)
Union find(素集合データ構造)Union find(素集合データ構造)
Union find(素集合データ構造)AtCoder Inc.
 
ユークリッド最小全域木
ユークリッド最小全域木ユークリッド最小全域木
ユークリッド最小全域木理玖 川崎
 
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~Takuya Akiba
 
指数時間アルゴリズム入門
指数時間アルゴリズム入門指数時間アルゴリズム入門
指数時間アルゴリズム入門Yoichi Iwata
 
プログラミングコンテストでのデータ構造
プログラミングコンテストでのデータ構造プログラミングコンテストでのデータ構造
プログラミングコンテストでのデータ構造Takuya Akiba
 
区間分割の仕方を最適化する動的計画法 (JOI 2021 夏季セミナー)
区間分割の仕方を最適化する動的計画法 (JOI 2021 夏季セミナー)区間分割の仕方を最適化する動的計画法 (JOI 2021 夏季セミナー)
区間分割の仕方を最適化する動的計画法 (JOI 2021 夏季セミナー)Kensuke Otsuki
 
ダブリング
ダブリングダブリング
ダブリングsatanic
 
様々な全域木問題
様々な全域木問題様々な全域木問題
様々な全域木問題tmaehara
 
直前合宿 講義スライド
直前合宿 講義スライド直前合宿 講義スライド
直前合宿 講義スライドtozan gezan
 
AtCoder Regular Contest 039 解説
AtCoder Regular Contest 039 解説AtCoder Regular Contest 039 解説
AtCoder Regular Contest 039 解説AtCoder Inc.
 
最適化超入門
最適化超入門最適化超入門
最適化超入門Takami Sato
 
AtCoder Regular Contest 033 解説
AtCoder Regular Contest 033 解説AtCoder Regular Contest 033 解説
AtCoder Regular Contest 033 解説AtCoder Inc.
 
AtCoder Regular Contest 046
AtCoder Regular Contest 046AtCoder Regular Contest 046
AtCoder Regular Contest 046AtCoder Inc.
 

What's hot (20)

明日使えないすごいビット演算
明日使えないすごいビット演算明日使えないすごいビット演算
明日使えないすごいビット演算
 
双対性
双対性双対性
双対性
 
Convex Hull Trick
Convex Hull TrickConvex Hull Trick
Convex Hull Trick
 
Union find(素集合データ構造)
Union find(素集合データ構造)Union find(素集合データ構造)
Union find(素集合データ構造)
 
ユークリッド最小全域木
ユークリッド最小全域木ユークリッド最小全域木
ユークリッド最小全域木
 
Rolling hash
Rolling hashRolling hash
Rolling hash
 
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
 
指数時間アルゴリズム入門
指数時間アルゴリズム入門指数時間アルゴリズム入門
指数時間アルゴリズム入門
 
最大流 (max flow)
最大流 (max flow)最大流 (max flow)
最大流 (max flow)
 
動的計画法を極める!
動的計画法を極める!動的計画法を極める!
動的計画法を極める!
 
プログラミングコンテストでのデータ構造
プログラミングコンテストでのデータ構造プログラミングコンテストでのデータ構造
プログラミングコンテストでのデータ構造
 
区間分割の仕方を最適化する動的計画法 (JOI 2021 夏季セミナー)
区間分割の仕方を最適化する動的計画法 (JOI 2021 夏季セミナー)区間分割の仕方を最適化する動的計画法 (JOI 2021 夏季セミナー)
区間分割の仕方を最適化する動的計画法 (JOI 2021 夏季セミナー)
 
ダブリング
ダブリングダブリング
ダブリング
 
グラフネットワーク〜フロー&カット〜
グラフネットワーク〜フロー&カット〜グラフネットワーク〜フロー&カット〜
グラフネットワーク〜フロー&カット〜
 
様々な全域木問題
様々な全域木問題様々な全域木問題
様々な全域木問題
 
直前合宿 講義スライド
直前合宿 講義スライド直前合宿 講義スライド
直前合宿 講義スライド
 
AtCoder Regular Contest 039 解説
AtCoder Regular Contest 039 解説AtCoder Regular Contest 039 解説
AtCoder Regular Contest 039 解説
 
最適化超入門
最適化超入門最適化超入門
最適化超入門
 
AtCoder Regular Contest 033 解説
AtCoder Regular Contest 033 解説AtCoder Regular Contest 033 解説
AtCoder Regular Contest 033 解説
 
AtCoder Regular Contest 046
AtCoder Regular Contest 046AtCoder Regular Contest 046
AtCoder Regular Contest 046
 

Viewers also liked

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 034 解説
AtCoder Beginner Contest 034 解説AtCoder Beginner Contest 034 解説
AtCoder Beginner Contest 034 解説AtCoder Inc.
 
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
 

Viewers also liked (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 034 解説
AtCoder Beginner Contest 034 解説AtCoder Beginner Contest 034 解説
AtCoder Beginner Contest 034 解説
 
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に毎回参加したくなる仕組み
 
オブジェクト指向できていますか?
オブジェクト指向できていますか?オブジェクト指向できていますか?
オブジェクト指向できていますか?
 
大規模グラフ解析のための乱択スケッチ技法
大規模グラフ解析のための乱択スケッチ技法大規模グラフ解析のための乱択スケッチ技法
大規模グラフ解析のための乱択スケッチ技法
 

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 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
 
プログラミングコンテスト基礎テクニック
プログラミングコンテスト基礎テクニックプログラミングコンテスト基礎テクニック
プログラミングコンテスト基礎テクニック
 

蟻本輪講 データ構造