2020年5月11日その他,その他競プロ,LCA,ダブリング,繰り返し二乗法

ダブリングは、全体の要素数がN個あって1回移動した時にどの要素に到達するのか定まっているとき、「K個先の要素を求めるのに \(O(K)\) かかる」ような状況において

前処理:\(O(N \log K)\) 時間, \(O(N ...

2020年4月3日動的計画法木DP,部分木,全方位木DP,単位元,動的計画法,,テーマ記事,競プロ,モノイド,結合則

競技プログラミングでよく出題される木DPについての説明と、木DPで解ける一部の問題を同じ計算量で全頂点について求められるように応用した全方位木DPについて解説します。

木DP基本的な考え方とイメージ

木DP とは、根を一つ固 ...

グラフフローネットワーク,最大フロー・最小カット定理,カット,最小カット,競プロ,フロー,最大フロー,Ford-Fulkerson

アルゴリズム

最小カットの容量を求めるアルゴリズム:

フローネットワーク \(G=(V,E)\) の最大フロー \(f^*\) の値 \(|f^*|\) を求める
\(|f^*|\) が最小カットの容量

...

2020年3月20日グラフフロー,最大フロー,二部グラフ,最大マッチング,マッチング,競プロ

アルゴリズム

二部グラフの最大マッチングを求めるアルゴリズム:

二部グラフ \(G=(L \cup R, E)\) に対応する以下のようなフローネットワーク \(G’\) を作る\(G\) にソース \(s\) ...

2020年3月19日グラフ競プロ,フロー,最大フロー,Ford-Fulkerson,フローネットワーク,最大フロー・最小カット定理

アルゴリズム

最大フローを求めるアルゴリズム(Ford-Fullkerson法):

フロー \(f\) を 0 としてはじめる
ソース(入口) からシンク(出口)までの増加可能経路 \(p\) が残余ネットワーク \ ...

2020年3月16日グラフ木の2頂点間の距離,木のパス上に頂点があるか,,競プロ,LCA,ダブリング

最近木においてある頂点の祖先は「親をたどってたどり着ける頂点」を指し、2頂点の共通祖先は「2頂点が共通して持つ祖先」のことを言います。

頂点 u と v の最近共通祖先(LCA: Lowest Common Ancesto ...

2020年3月15日AtCoderイベントソート,座標圧縮,競プロ,セグメント木,区間,更新,データ構造,set,imos法,遅延評価セグメント木

問題へのリンク

問題概要

 N 回の通行止めがあり、 Q 人の人ははじめ座標 0 に立っている。 
\(i\) 番目の道路工事は時刻&n ...

2020年3月15日その他bit全探索,全探索,テーマ記事,競プロ,半分全列挙,テクニック

N 個の要素の組み合わせを計算する際、N/2 ずつの2グループに分けてそれぞれを全列挙し、組み合わせ方を高速に求めるという工夫を「半分全列挙」と言います。

選択した数列の合計値を半分全列挙で探索する場合(\(2^4\)ずつに分け ...

2020年3月13日グラフ,競プロ,無向グラフ,重み付きグラフ,木の直径,グラフ

木に存在する2つノード間の最大距離を木の直径と言います。

重み無しの木でも、重み付きの木でも、木の最遠頂点間の距離が直径になります。

重み無しの木の例:

以下は直径が5となる木の例で

2020年3月13日その他二人零和有限確定完全情報ゲーム,Grundy数,不偏ゲーム,組み合わせゲーム,スプレイグ・グランディの定理,Nim,NimK,テーマ記事,Misere Nim,競プロ

競技プログラミングなどで頻出のテーマである組み合わせゲームやGrundy数についてまとめました。

前半は全ての方に向けての内容で、プログラム例や競技プログラミング特有の話題については後半にあります。

組み合わせゲーム ...