canuc80k3001·2/50

Số Cụm Trong Mạng

Nộp bài trên LQDOJ

Bài 30 · DFS and BFS

Một mạng vô hướng đơn có nút đánh số từ đến . Hai nút có thể được nối bởi một liên kết hai chiều. Không có liên kết từ một nút tới chính nó và không có hai liên kết trùng nhau.

Một cụm liên thông là một tập cực đại các nút sao cho giữa mọi cặp nút trong tập đều tồn tại một đường đi qua các liên kết. Hãy xác định mạng có bao nhiêu cụm liên thông.

Input

  • Dòng đầu chứa hai số nguyên và .
  • Mỗi dòng trong dòng tiếp theo chứa hai số nguyên và , biểu thị một liên kết hai chiều giữa hai nút đó.

Output

  • In ra một số nguyên duy nhất là số cụm liên thông.

Constraints

  • .
  • .
  • .
  • Mạng là đồ thị đơn.

Scoring

  • Subtask ( số điểm): .
  • Subtask ( số điểm): Không có giới hạn bổ sung.

Example

Test 1

Input

7 4
1 2
2 3
4 5
6 7

Output

3

Giải thích: Ba cụm là và ; không có liên kết nào nối hai cụm khác nhau.

Lời giải tóm tắt
  • Ý tưởng: Duyệt các nút theo thứ tự tăng dần. Khi gặp một nút chưa được đánh dấu, tăng đáp án lên một và chạy BFS từ nút đó. BFS đánh dấu chính xác toàn bộ các nút thuộc cùng cụm.
  • Ý tưởng: Mỗi bước BFS chỉ đi theo một liên kết nên không thể rời khỏi cụm đang xét. Ngược lại, mọi nút trong cụm có một đường đi từ nút bắt đầu, vì vậy BFS sẽ lần lượt tới được nút ấy. Do đó mỗi lần khởi động BFS tương ứng đúng một cụm và mọi cụm đều được khởi động đúng một lần.
  • Ý tưởng: Độ phức tạp là O(n+m) thời gian và O(n+m) bộ nhớ.