はまやんはまやんはまやん

hamayanhamayan's blog

競技プログラミングにおける連結DP問題まとめ

連結DP

  • 造語なのだが、連結性を状態として持つDP
  • フロンティア法とかとも言う

競技プログラミングにおける挿入DP問題まとめ

挿入DP

  • 順列などに挿入することで遷移を進めていくDP

挿入DPとは逆に抜いていくDP(抜去DP)

【発展的話題】挿入DPの更新最適化

挿入DPの時に掛け算を遅延評価して、上手くやる

rep(i, 0, N) rep(k, 0, N) rep(col, 0, N) {
    dp[i + 1][k][col] = dp[i][k][col] * (k + 1);
    if(c[i] == col) dp[i + 1][k][c[i]] += dp[i][k][col];
    else dp[i + 1][k + 1][c[i]];
}

を掛け算を遅延評価することでO(N^3)からO(N^2)へ削減可能

競技プログラミングにおけるUnionFind問題まとめ [DSU]

UnionFind, DSU

  • 連結成分を管理するデータ構造 (解説)
  • AtCoder Libraryで実装がある
  • 最小全域木の構成でも使われる
  • 連結時に成分に入っている情報を併合することもある(要素数とか)
  • incremental(併合はできるが、分離はできない)
  • (発展だが)永続UnionFindもある
  • 森の連結成分は「頂点数-辺数」で求められるテクがある
  • ダブリングを用いることで連続区間のマージができるようになる 問題1 問題2

【発展的話題】 Dynamic Connectivity

問題

競技プログラミングにおけるマンハッタン距離問題まとめ

マンハッタン距離