AtCoder Beginner Contest 258 G問題 Triangle
問題
提出解答
問題の概要
頂点からなる単純無向グラフ の接続行列 が与えられる. この にある三角形の個数を求めよ.
つまり, 以下を満たす整数の組 の個数を求めよ.
制約
- は単純無向グラフ の接続行列
解法1 (正解を求める)
数え上げの答えを考える. 辺 を含むような に存在する三角形の個数を求める. このとき, が を含む三角形の残りの1頂点になりうることの必要十分条件は が の共通近傍であることである.
つまり, の近傍全体の集合を とした時, 1つの三角形について上の方法だと3回カウントされることから, 求めるべき解答 は
である.
ここで, 各 に対して を求めるためには 時間かかってしまい, の辺の数を とすると, となり, 最悪時間計算量 となってしまう.
解法2 (高速化)
よって, 高速化が必要になるが, 今回の問題の場合, 時間計算量を にすることは厳しい. しかし, 例えば C++ においては bitset というデータ構造を用いることにより, を求める過程が 倍高速化される.
よって, を求めるための計算量が
となり, 実装に十分の注意を払えば実行時間制限に間に合わせることができる.