Learning Algorithms

アルゴリズムの勉強メモ

2018-01-01から1ヶ月間の記事一覧

二次元累積和のライブラリ

二次元累積和のライブラリです。手で書いた方が早いレベルですが、何も考えずに求めたいときは貼ります。グリッド上で任意の長方形に含まれる数の総和を $O(HW)$ の初期化の後に $O(1)$ で求めます。antaさんがこれをRectangleSumと名付けて使っていた気がす…

辺を構築していく問題を解くためのテクニックについて

はじめに 辺を構築していく問題を解くテクニックについて書きます。全然一般的には使えませんが、とりあえず以下の $2$ 問が似たような感じで解けます。C - 3 Steps F - Blackoutどちらの問題も距離を適切に定義してやると簡単に解けます(というか二問目は…

二部グラフのライブラリ

二部グラフのライブラリです。この問題で $verify$ しています。$DFS$ を実装するだけですが、持っておくと便利な時がたまにあります。二部グラフかどうかを判定したい無向グラフの隣接リストgを投げて使います。二部グラフではない場合は、-1が返ってきて、…

彩色数を求めるアルゴリズム

はじめに 彩色数を求めるアルゴリズムについて書きました。English version is available here. 彩色数とは 彩色数(chromatic number)とは、無向グラフにおいて、辺で繋がれた頂点同士が、互いに異なる色でなければいけないという制約のもとで、すべての頂点…

Atcoder Regular Contest 041 D. 辺彩色

D - 辺彩色 解法 まず辺に色を塗っていく操作を、逆順から見ていきます。この発想は以下のような問題でも使えます。B - Splatter Paintingそうすると、一回塗った辺はもう変更することができないという操作に変えることができます。すると、各辺は条件を満た…

Codeforces 458 E. Palindromes in a Tree

Problem - E - Codeforcespekempeyさんが書かれたコードから学びました。わかりやすすぎてありがたすぎます。 解法 まず、ある文字の集合を適切に並べると回文になるという条件は、出現回数が奇数である文字の種類が $1$ 個以下である、という条件に言い換え…

Hirschberg's Algorithmについて

はじめに $Hirschberg's\ Algorithm$ に関する解説を丁寧に書きました。English version is available here. 問題 まず次の問題をご覧くださいCS Academy概要:各マスに数字が書かれたグリッドが与えられ、そのグリッド上で左上のマスから右下のマスまで最短…

重心分解による分割統治法の一般形について

追記 2018/01/22 ・重心を求めるアルゴリズムを変更して高速化しました。 ・最後に実践的な例題を置きました。 はじめに アリ本に載っているものよりも、(個人的に)わかりやすく整理した重心分解による分割統治法の一般形について書きます(アリ本でばっち…

CS Academy 065 E. Classic Task

CSA

問題 CS Academy 感想 変わった問題でおもしろいです。 解法 自明 $DP$ 解を書くと、やばいくらい $MLE$ します。$O(nm)$ のグリッドを用意するだけで $MLE$ するので注意です。空間計算量を落としたいので、$Hirschberg's\ algorithm$ (参考)という最高のア…

Atcoder Regular Contest 063 E. 木と整数 / Integers on a Tree

Atcoder Regular Contest 063 E. 木と整数 / Integers on a Tree E - 木と整数 / Integers on a Tree 感想 ふつうに木の上で計算しました。 解法 まず頂点 $0$ を根として考えることにします。明らかな性質として、深さが同じような頂点に書かれた値すべての…

Atcoder Regular Contest 088 F. Christmas Tree

Atcoder Regular Contest 088 F. Christmas Tree F - Christmas Tree 感想 木をいくつかのパスで被覆する、よくありそうな問題です。CSA Flip the Edgesに似ています。 解法 まずパスの両端の次数は奇数でそれ以外は偶数である(それはそう)という性質から…

第4回ドワンゴからの挑戦状予選 E. ニワンゴくんの家探し

第4回ドワンゴからの挑戦状予選 E. ニワンゴくんの家探し E - ニワンゴくんの家探しかなり好きな問題だったので、本番で通したかった。 解法 まず分割して考えていきたい気持ちになるので、重心に注目します。重心が二つある場合は、その重心の $2$ 頂点でク…

お寿司をできるだけたくさん食べるアルゴリズム

お寿司をできるだけたくさん食べるアルゴリズム みなさんお寿司は好きですか? 僕は好きです。というわけで、できるだけたくさんの種類のお寿司を食べるためのアルゴリズムについて書きます。さて、早速たくさん食べる方法について考えていきます。まずお寿…

Atcoder Grand Contest 013 F. Two Faced Cards

Atcoder Grand Contest 013 F. Two Faced Cards F - Two Faced Cards 解法 解法がかなりきれいで、よい問題だと思いました。editorialの英語版がわかりやすかったので、そこに書かれているように実装しました。まず定石ですが、$c$ はソートして座圧し、$c$ …

木の重心列挙アルゴリズム

木の重心列挙アルゴリズム English version is available here.木の重心を列挙するアルゴリズムです。重心の性質をよく知っている方にとっては自明な木$dp$を実装するだけだと思います。これで $verify$ しています。計算量は $O(n)$ です。中のアルゴリズム…