SlideShare a Scribd company logo
1 of 15
解説:デバッグ
技術室奥プログラミングコンテスト#2 問題H
問題概要
グラフが与えられるので、それぞれの頂点を始点と
した、長さ4のパスの数を数えてください。
考察
いきなり長さ4のパスを数え上げるのは難しそう
1ずつ増やしていく
以下、見ている頂点をVと表現します
考察
長さ1のパス
自明(Vの次数)
考察
長さ2のパス
(隣接する頂点の次数の総和)
ー(Vの次数)
考察
長さ3のパス
 (隣接する頂点から延びる長さ2のパスの数)
ー(隣接する頂点→V→それ以外、という
長さ2のパスの数)
ー(Vを通る長さ3の閉路の数)×2
考察
長さ3のパス
 (隣接する頂点から延びる長さ2のパスの数)
ー(隣接する頂点→V→それ以外、という
長さ2のパスの数)
ー(Vを通る長さ3の閉路の数)×2
v
このパターンを除外する
考察
長さ4のパス
 (隣接する頂点から延びる長さ3のパスの数)
ー(隣接する頂点→V→それ以外、という
長さ3のパスの数)
ー(Vを通る長さ4の閉路の数)×2
ー(Vを通る長さ3の閉路の数)×(Vの次数ー2)×2
長さ4のパス
 (隣接する頂点から延びる長さ3のパスの数)
ー(隣接する頂点→V→それ以外、という
長さ3のパスの数)
ー(Vを通る長さ4の閉路の数)×2
ー(Vを通る長さ3の閉路の数)×(Vの次数ー2)×2
考察
v
このパターンを除外する
長さ4のパス
 (隣接する頂点から延びる長さ3のパスの数)
ー(隣接する頂点→V→それ以外、という
長さ3のパスの数)
ー(Vを通る長さ4の閉路の数)×2
ー(Vを通る長さ3の閉路の数)×(Vの次数ー2)×2
考察
v
このパターンを除外する
アルゴリズム
長さ3の閉路と長さ4の閉路がうまく数え上げられ
れば求められそう。
愚直にやるとO(n^4)で部分点10点がもらえます。
アルゴリズム
こんなアルゴリズムを考える。
まず、頂点を、pair(次数、番号)で降順ソートする
これを先頭から順番に見ていって、次のような操作
を行う。
アルゴリズム
Vに隣接する頂点Uについて、Uに隣接するV以外の頂点
に1足す。
全てのUについてこれを行った後は、簡単な計算で、
Vがソートで一番前に来るような頂点の組み合わせから
なる、長さ3,4の閉路を数え上げられる。(例えば、
頂点kの値がsなら、s×(s-1)/2個の長さ4の閉路がある)
終わったら、Vから出ている辺は消す
アルゴリズム
次数wの頂点からこの操作を行った際にかかる計算
量は、O(min(W^2,M))
min(W^2,M)≦W√M
全ての頂点についてこれを行うと、次数の総和が2M
だから、全体でO(M√M)になる。
アルゴリズム
細かい計算のところの説明がかなり省かれてるので、
コードも併せてみるとわかりやすいと思います。
おしまい

More Related Content

What's hot

AtCoder Beginner Contest 035 解説
AtCoder Beginner Contest 035 解説AtCoder Beginner Contest 035 解説
AtCoder Beginner Contest 035 解説AtCoder Inc.
 
AtCoder Regular Contest 037 解説
AtCoder Regular Contest 037 解説AtCoder Regular Contest 037 解説
AtCoder Regular Contest 037 解説AtCoder Inc.
 
CRC-32
CRC-32CRC-32
CRC-327shi
 
競技プログラミングでの線型方程式系
競技プログラミングでの線型方程式系競技プログラミングでの線型方程式系
競技プログラミングでの線型方程式系tmaehara
 
様々な全域木問題
様々な全域木問題様々な全域木問題
様々な全域木問題tmaehara
 
3次元の凸包を求める
3次元の凸包を求める3次元の凸包を求める
3次元の凸包を求めるabc3141
 
最小カットを使って「燃やす埋める問題」を解く
最小カットを使って「燃やす埋める問題」を解く最小カットを使って「燃やす埋める問題」を解く
最小カットを使って「燃やす埋める問題」を解くshindannin
 
LCA and RMQ ~簡潔もあるよ!~
LCA and RMQ ~簡潔もあるよ!~LCA and RMQ ~簡潔もあるよ!~
LCA and RMQ ~簡潔もあるよ!~Yuma Inoue
 
AtCoder Regular Contest 001
AtCoder Regular Contest 001AtCoder Regular Contest 001
AtCoder Regular Contest 001AtCoder Inc.
 
競技プログラミングにおけるコードの書き方とその利便性
競技プログラミングにおけるコードの書き方とその利便性競技プログラミングにおけるコードの書き方とその利便性
競技プログラミングにおけるコードの書き方とその利便性Hibiki Yamashiro
 
AtCoder Regular Contest 033 解説
AtCoder Regular Contest 033 解説AtCoder Regular Contest 033 解説
AtCoder Regular Contest 033 解説AtCoder Inc.
 
ウェーブレット木の世界
ウェーブレット木の世界ウェーブレット木の世界
ウェーブレット木の世界Preferred Networks
 

What's hot (20)

AtCoder Beginner Contest 035 解説
AtCoder Beginner Contest 035 解説AtCoder Beginner Contest 035 解説
AtCoder Beginner Contest 035 解説
 
AtCoder Regular Contest 037 解説
AtCoder Regular Contest 037 解説AtCoder Regular Contest 037 解説
AtCoder Regular Contest 037 解説
 
CRC-32
CRC-32CRC-32
CRC-32
 
競技プログラミングでの線型方程式系
競技プログラミングでの線型方程式系競技プログラミングでの線型方程式系
競技プログラミングでの線型方程式系
 
様々な全域木問題
様々な全域木問題様々な全域木問題
様々な全域木問題
 
Convex Hull Trick
Convex Hull TrickConvex Hull Trick
Convex Hull Trick
 
明日使えないすごいビット演算
明日使えないすごいビット演算明日使えないすごいビット演算
明日使えないすごいビット演算
 
Chokudai search
Chokudai searchChokudai search
Chokudai search
 
3次元の凸包を求める
3次元の凸包を求める3次元の凸包を求める
3次元の凸包を求める
 
線形計画法入門
線形計画法入門線形計画法入門
線形計画法入門
 
直交領域探索
直交領域探索直交領域探索
直交領域探索
 
最小カットを使って「燃やす埋める問題」を解く
最小カットを使って「燃やす埋める問題」を解く最小カットを使って「燃やす埋める問題」を解く
最小カットを使って「燃やす埋める問題」を解く
 
LCA and RMQ ~簡潔もあるよ!~
LCA and RMQ ~簡潔もあるよ!~LCA and RMQ ~簡潔もあるよ!~
LCA and RMQ ~簡潔もあるよ!~
 
双対性
双対性双対性
双対性
 
AtCoder Regular Contest 001
AtCoder Regular Contest 001AtCoder Regular Contest 001
AtCoder Regular Contest 001
 
競技プログラミングにおけるコードの書き方とその利便性
競技プログラミングにおけるコードの書き方とその利便性競技プログラミングにおけるコードの書き方とその利便性
競技プログラミングにおけるコードの書き方とその利便性
 
AtCoder Regular Contest 033 解説
AtCoder Regular Contest 033 解説AtCoder Regular Contest 033 解説
AtCoder Regular Contest 033 解説
 
ウェーブレット木の世界
ウェーブレット木の世界ウェーブレット木の世界
ウェーブレット木の世界
 
Trianguler
TriangulerTrianguler
Trianguler
 
目指せグラフマスター
目指せグラフマスター目指せグラフマスター
目指せグラフマスター
 

Viewers also liked

J - 次の仕事
J - 次の仕事J - 次の仕事
J - 次の仕事gotoloop
 
F - NPCの家
F - NPCの家F - NPCの家
F - NPCの家gotoloop
 
線形識別によるパターン認識
線形識別によるパターン認識線形識別によるパターン認識
線形識別によるパターン認識理玖 川崎
 
カードの取り合い
カードの取り合いカードの取り合い
カードの取り合い理玖 川崎
 
Palindromic tree
Palindromic treePalindromic tree
Palindromic tree__math
 
AtCoder Beginner Contest 021 解説
AtCoder Beginner Contest 021 解説AtCoder Beginner Contest 021 解説
AtCoder Beginner Contest 021 解説AtCoder Inc.
 
Layer Normalization@NIPS+読み会・関西
Layer Normalization@NIPS+読み会・関西Layer Normalization@NIPS+読み会・関西
Layer Normalization@NIPS+読み会・関西Keigo Nishida
 
IPAB2017 深層学習を使った新薬の探索から創造へ
IPAB2017 深層学習を使った新薬の探索から創造へIPAB2017 深層学習を使った新薬の探索から創造へ
IPAB2017 深層学習を使った新薬の探索から創造へPreferred Networks
 

Viewers also liked (11)

解説:貢物
解説:貢物解説:貢物
解説:貢物
 
解説:ボス
解説:ボス解説:ボス
解説:ボス
 
J - 次の仕事
J - 次の仕事J - 次の仕事
J - 次の仕事
 
F - NPCの家
F - NPCの家F - NPCの家
F - NPCの家
 
線形識別によるパターン認識
線形識別によるパターン認識線形識別によるパターン認識
線形識別によるパターン認識
 
石油
石油石油
石油
 
カードの取り合い
カードの取り合いカードの取り合い
カードの取り合い
 
Palindromic tree
Palindromic treePalindromic tree
Palindromic tree
 
AtCoder Beginner Contest 021 解説
AtCoder Beginner Contest 021 解説AtCoder Beginner Contest 021 解説
AtCoder Beginner Contest 021 解説
 
Layer Normalization@NIPS+読み会・関西
Layer Normalization@NIPS+読み会・関西Layer Normalization@NIPS+読み会・関西
Layer Normalization@NIPS+読み会・関西
 
IPAB2017 深層学習を使った新薬の探索から創造へ
IPAB2017 深層学習を使った新薬の探索から創造へIPAB2017 深層学習を使った新薬の探索から創造へ
IPAB2017 深層学習を使った新薬の探索から創造へ
 

More from 理玖 川崎

区間和剰余クエリ
区間和剰余クエリ区間和剰余クエリ
区間和剰余クエリ理玖 川崎
 
ユークリッド最小全域木
ユークリッド最小全域木ユークリッド最小全域木
ユークリッド最小全域木理玖 川崎
 
解説:歩くNPCたち
解説:歩くNPCたち解説:歩くNPCたち
解説:歩くNPCたち理玖 川崎
 
解説:エンブレム
解説:エンブレム解説:エンブレム
解説:エンブレム理玖 川崎
 
解説:サポーター
解説:サポーター解説:サポーター
解説:サポーター理玖 川崎
 
解説:おおきな数を作った
解説:おおきな数を作った解説:おおきな数を作った
解説:おおきな数を作った理玖 川崎
 
解説:吹奏楽部
解説:吹奏楽部解説:吹奏楽部
解説:吹奏楽部理玖 川崎
 

More from 理玖 川崎 (10)

RNNで頑張ろう
RNNで頑張ろうRNNで頑張ろう
RNNで頑張ろう
 
釣り
釣り釣り
釣り
 
区間和剰余クエリ
区間和剰余クエリ区間和剰余クエリ
区間和剰余クエリ
 
ユークリッド最小全域木
ユークリッド最小全域木ユークリッド最小全域木
ユークリッド最小全域木
 
解説:歩くNPCたち
解説:歩くNPCたち解説:歩くNPCたち
解説:歩くNPCたち
 
解説:エンブレム
解説:エンブレム解説:エンブレム
解説:エンブレム
 
解説:サポーター
解説:サポーター解説:サポーター
解説:サポーター
 
解説:おおきな数を作った
解説:おおきな数を作った解説:おおきな数を作った
解説:おおきな数を作った
 
解説:吹奏楽部
解説:吹奏楽部解説:吹奏楽部
解説:吹奏楽部
 
WAVE_WITH_GLSL
WAVE_WITH_GLSLWAVE_WITH_GLSL
WAVE_WITH_GLSL
 

解説:デバッグ