diaryプロコンとかいろいろ。(1)yukicoderなんか狐につままれたような気分。yukicoder解法:解説のところに書いてあるとおり,O(N^3)であるような気がする計算量が,実はO(N^2)であるというトリックで時間内に解くことができる,という感じ。ソースコード参照しながらそのことについて説明します。p)の部分で計算しています。vは今見ている頂点でpがその親という例のアレです。(頂点vを根として,黒のノードの数をk個にするような塗り方は何通りあるか)というものを計算しています(なので求める答えはdfs(0,-1)[K]ですね)。子ノードごとにこのdpを計算していくと,dp[v]はdfs中のnretでやっているように計算できます。O(N^3)になっているように思われます。これは実はO(N^2)の計算量で計算されています。簡単な例として各頂点に2つの子しかいないとしましょう。T(r)はそれぞれの子ノードを探索するのにかかる計算量,l*rはfor文を回すのにかかる計算量)。l^2+r^2+2*l*rであるので,T(n)=O(n^2)です。-1)はO(n^2)でできるのでこの問題での計算量的に間に合っているということです。次に一般の場合を考えましょう。(s0+s1+...+s(m-1))*smとなります。O(n^2)となります。月別アーカイブはてなブログをはじめよう!mayokoexさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。