Menu
CoddyTech

Strongly Connected Components

むずかしいグラフpython iconjava iconcpp iconc iconjs icon+10

有向グラフには、0 から n-1 まで番号が付けられた n 個のノードと、edges のリストがあります。ここで [from, to] は、ノード from からノード to への辺を表します。

強連結成分とは、辺をたどることで各ノードから他のすべてのノードに到達できる、最大のノードのグループです。各ノードはちょうど1つの成分に属し、どのサイクルにも属さないノードはそれ自体で1つの成分を形成します。強連結成分の数を返してください。

関数

countSCC(n: integer, edges: integer-2d-array) → integer
ninteger
ノードの数
edgesinteger-2d-array
有向辺をそれぞれ [from, to] として
戻り値integer
強連結成分の数

制約

  • 2 ≤ n ≤ 104
  • 1 ≤ edges.length ≤ 5000
  • edges[i] = [from, to] であり、0 ≤ from, to < n かつ from ≠ to
  • 同じ辺が2回現れることはありません。

例

入力
n = 6edges = [[0, 1], [1, 2], [2, 0], [2, 3], [3, 4], [4, 3], [5, 4]]
出力
3
説明
ノード 0、1、2 はループを形成しているため、互いに到達できます。ノード 3 と 4 は互いを指しています。ノード 5 からは 4 に到達できますが、5 に戻る経路はないため、5 は単独です。つまり、コンポーネントは 3 つです。
challenge icon

発展問題

グラフ全体を1つの強連結成分にするには、辺を最低何本追加する必要がありますか?

コードをリセット
def countSCC(n, edges):
    # ここにコードを書いてください

テスト #1

テスト #2

引数

n = 6
edges = [[0, 1], [1, 2], [2, 0], [2, 3], [3, 4], [4, 3], [5, 4]]

期待される出力

3