ダブリングの基本概念とその応用
ダブリングは、全体の要素数がN個あって1回移動した時にどの要素に到達するのか定まっているとき、「K個先の要素を求めるのに \(O(K)\) かかる」ような状況において
前処理:\(O(N \log K)\) 時間, \(O(N ...木DPと全方位木DPを基礎から抽象化まで解説【競技プログラミング】
競技プログラミングでよく出題される木DPについての説明と、木DPで解ける一部の問題を同じ計算量で全頂点について求められるように応用した全方位木DPについて解説します。
木DP基本的な考え方とイメージ木DP とは、根を一つ固 ...
フローネットワークの最小カットの容量を求めるアルゴリズム
アルゴリズム
\(|f^*|\) が最小カットの容量
最小カットの容量を求めるアルゴリズム:
フローネットワーク \(G=(V,E)\) の最大フロー \(f^*\) の値 \(|f^*|\) を求める\(|f^*|\) が最小カットの容量
...
二部グラフの最大マッチングを求めるアルゴリズム
アルゴリズム
二部グラフの最大マッチングを求めるアルゴリズム:
二部グラフ \(G=(L \cup R, E)\) に対応する以下のようなフローネットワーク \(G’\) を作る\(G\) にソース \(s\) ...Ford-Fullkerson法による最大フローの値を求めるアルゴリズム
アルゴリズム
ソース(入口) からシンク(出口)までの増加可能経路 \(p\) が残余ネットワーク \ ...
最大フローを求めるアルゴリズム(Ford-Fullkerson法):
フロー \(f\) を 0 としてはじめるソース(入口) からシンク(出口)までの増加可能経路 \(p\) が残余ネットワーク \ ...
ダブリングによる木の最近共通祖先(LCA:Lowest Common Ancestor)を求めるアルゴリズム
最近木においてある頂点の祖先は「親をたどってたどり着ける頂点」を指し、2頂点の共通祖先は「2頂点が共通して持つ祖先」のことを言います。
頂点 u と v の最近共通祖先(LCA: Lowest Common Ancesto ...
E – Roadwork 解説(AtCoder Beginner Contest 128)
問題へのリンク
問題概要 N 回の通行止めがあり、 Q 人の人ははじめ座標 0 に立っている。
\(i\) 番目の道路工事は時刻&n ...
半分全列挙による全探索の高速化
N 個の要素の組み合わせを計算する際、N/2 ずつの2グループに分けてそれぞれを全列挙し、組み合わせ方を高速に求めるという工夫を「半分全列挙」と言います。
選択した数列の合計値を半分全列挙で探索する場合(\(2^4\)ずつに分け ...木の直径を求めるアルゴリズム
木に存在する2つノード間の最大距離を木の直径と言います。
重み無しの木でも、重み付きの木でも、木の最遠頂点間の距離が直径になります。
重み無しの木の例:
以下は直径が5となる木の例で
組み合わせゲーム理論の基礎とGrundy数での勝敗判定アルゴリズム
競技プログラミングなどで頻出のテーマである組み合わせゲームやGrundy数についてまとめました。
前半は全ての方に向けての内容で、プログラム例や競技プログラミング特有の話題については後半にあります。
組み合わせゲーム ...