ダイクストラ法による単一始点最短経路を求めるアルゴリズム
グラフにおける単一始点最短経路問題とは、始点を固定した時に、他のすべての頂点への最短経路を求める問題のことです。
ダイクストラ法は、単一始点最短経路問題を解く時に利用され、利点としては
計算量が \(O(|E| \l ...ベルマンフォード法による単一始点最短経路を求めるアルゴリズム
グラフにおける単一始点最短経路問題とは、始点を固定した時に、他のすべての頂点への最短経路を求める問題のことです。
ベルマンフォード法は、単一始点最短経路問題を解く時に利用され、
負の辺が含まれているような場合でも適用 ...競プロでよく出る区間和問題の解き方まとめ
区間の更新が生じない場合は、累積和を用いることで高速にクエリを処理できます。
一次元の区間和累積和を用いることで、
前処理:\(O(N)\)クエリ:\(O(1)\)
で処理がで ...
Binary Indexed Tree (BIT) 総まとめ!区間加算や二次元BITまで
Binary Indexed Tree (またはフェニック木) は 数列 \(a_1, a_2, a_3, \cdots, a_n\) が与えられた時に、以下のようなことがそれぞれ \(O(log n)\) で実現できるデータ構造のこ ...
N の約数を全列挙するアルゴリズム
整数 N の約数とは「整数 N を割り切ることができる整数またはその集合」のことです。
単純なアルゴリズムでは約数の全列挙に \(O(N)\) だけかかりますが、約数の性質を活かすと \(O(\sqrt{N})\) で全列 ...
[AtCoder] ABC157 D – Friend Suggestions 解説(400点)
N 人がいて、M 組が友達関係、K 組がブロック関係である。それぞれに対して以下を満たす「友達候補」が何人いるか答えよ。
まだ友達関係ではないブロック関係ではない
友達関係を辿ってたどり着ける
制約\ ...
[AtCoder]ABC157 E – Simple String Queries (500点)
長さ N の英小文字からなる文字列 S を与えられ、以下の二種類のクエリ合計 Q 個を処理する。
S の \(i_q\) 番目を \(c_q\) に変更するS の \(i_q\) 番目から \(r_q\) 番目ま ...
素因数分解のアルゴリズム
素因数分解とは「ある自然数を素数の積の形に分解すること」です。
\(12 = 2^2 × 3\)\(1024 = 2^{10}\)
1つの自然数 n を \(O(\sqrt{n})\) で素因数分解する方法と ...
2つの自然数の最小公倍数(LCM)を求めるアルゴリズム
最小公倍数(LCM: least common multiple) とは、「0でない複数の自然数の公倍数のうち最小の自然数」のことを言います。
最小公倍数は、最大公約数を利用することで簡単に求めることができます。
2 ...素数かどうかを判定するアルゴリズム
素数とは 「1 より大きい自然数で、正の約数が 1 と自分自身のみであるような数」です。
ある数 \(n\) が素数かどうかを判定するためには、単純に考えると \(O(n)\) の計算量になりますが、後述する通り実は \( ...