Kazun の競プロ記録

競技プログラミングに関する様々な話題を執筆します.

AtCoder Beginner Contest 292 E問題 Transitivity

問題

atcoder.jp

提出解答

atcoder.jp

問題の概要

単純有向グラフ  D=(V,A) がある. ただし,

  •  V:=\{1,2, \dots, N\}
  •  A:=\{\overrightarrow{u_j v_j} \mid j=1,2, \dots, M\}

このとき, 以下の条件を満たすためには,  D に最小で何本の有向辺を追加しなければならないか?

  •  a,b,c \in V~(a \neq b, b \neq c, a \neq c) に対して,  \overrightarrow{ab},  \overrightarrow{bc} \in A ならば,  \overrightarrow{ac} \in A.

制約

  •  3 \leq N \leq 2000
  •  0 \leq M \leq 2000
  •  1 \leq u_j, v_j \leq N
  •  D は単純

解法

最終的な有向グラフ  D'=(V,A') は以下のようになる.

  •  a,b \in V~(a \neq b) に対して,  \overrightarrow{ab} \in A' であることと,  D において,  a から  b へ到達可能であることが同値になる.

実際, この  D' は条件を満たしている.

そして,  a \in V から到達可能な  b \in V において,  a から  b への有向パスを  a,p_1,p_2, \dots, p_{m-1}, b とする. このとき,

  •  \overrightarrow{ap_1}, \overrightarrow{p_1p_2} \in A なので,  \overrightarrow{ap_2} \in A' である.
  •  \overrightarrow{ap_2}, \overrightarrow{p_2p_3} \in A なので,  \overrightarrow{ap_3} \in A' である.
  •  \vdots
  •  \overrightarrow{ap_{m-1}}, \overrightarrow{p_{m-1}b} \in A なので,  \overrightarrow{ab} \in A' である.

となる. よって,  a から全て到達可能な  b \overrightarrow{ab} \in A' でなくてはならないことが分かった.


よって, 求めるべきは頂点  x の出次数を  \operatorname{outdeg}(x),  x から到達可能な  x 以外の頂点数を  \operatorname{reach}(x) とすると,

 \displaystyle \sum_{x \in V} (\operatorname{outdeg}(x)-\operatorname{reach}(x))=\sum_{x \in V} \operatorname{outdeg}(x)-M

である. 各  x \in V に対して, \operatorname{outdeg}(x) O(N+M) 時間で求められるので, 全ての  x に対して求めることで,  O(N(N+M)) 時間で求められる.