Menu
CoddyTech

Strongly Connected Components

Đồ thị có hướng có n nút, được đánh số từ 0 đến n-1, và một danh sách edges, trong đó [from, to] là một cạnh từ nút from đến nút to.

Thành phần liên thông mạnh là nhóm nút lớn nhất mà từ mỗi nút đều có thể đi đến mọi nút khác bằng cách đi theo các cạnh. Mỗi nút thuộc chính xác một thành phần, còn nút không nằm trên chu trình nào sẽ tự tạo thành một thành phần. Hãy trả về số thành phần liên thông mạnh.

Hàm

countSCC(n: integer, edges: integer-2d-array) → integer
ninteger
số lượng nút
edgesinteger-2d-array
các cạnh có hướng, mỗi cạnh có dạng [from, to]
Trả vềinteger
số lượng thành phần liên thông mạnh

Ràng buộc

  • 2 ≤ n ≤ 104
  • 1 ≤ edges.length ≤ 5000
  • edges[i] = [from, to] với 0 ≤ from, to < n và from ≠ to
  • Không có cạnh nào xuất hiện hai lần.

Ví dụ

Đầu vào
n = 6edges = [[0, 1], [1, 2], [2, 0], [2, 3], [3, 4], [4, 3], [5, 4]]
Đầu ra
3
Giải thích
Các nút 0, 1 và 2 tạo thành một vòng lặp nên có thể đến được với nhau. Nút 3 và 4 trỏ đến nhau. Nút 5 đến được nút 4, nhưng không có đường nào quay lại nút 5, nên nút 5 đứng riêng: 3 thành phần.
challenge icon

Câu hỏi mở rộng

Bạn cần thêm ít nhất bao nhiêu cạnh để toàn bộ đồ thị trở thành một thành phần liên thông mạnh duy nhất?

Đặt lại code
def countSCC(n, edges):
    # Viết code tại đây

Kiểm thử #1

Kiểm thử #2

Đối số

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

Đầu ra mong đợi

3