cpp-036Đọc toàn bộ đề miễn phí

Thuật toán Tarjan tìm khớp và cầu trên đồ thị vô hướng

Hạ tầng mạng viễn thông của AI Empire Academy gồm N trạm máy chủ (1 ≤ N ≤ 105) và M đường cáp quang nối trực tiếp (1 ≤ M ≤ 2 · 105). Đồ thị là vô hướng, có thể không…

C++Nâng cao45 phút

Tiến độ của tôi ở bài này

Điểm được lưu vào tài khoản sau khi chấm bài.

Đang tải điểm của bạn…

Kiến thức và chủ đề

tarjangraphsdfsbridgesarticulation points

Kiến thức tiên quyết: graph representation, dfs, std vector.

Nội dung đề bài

Mục tiêu kiến thức

  • Hiểu cây tìm kiếm theo chiều sâu (DFS Tree), phân biệt cạnh trên cây (Tree Edge) và cạnh ngược (Back Edge).
  • Cài đặt thuật toán Tarjan với hai mảng mốc thời gian: tin[u] (thời điểm thăm) và low[u] (thời điểm nhỏ nhất vươn tới được qua tối đa 1 cạnh ngược).
  • Nhận biết điều kiện cầu (low[v] > tin[u]) và đỉnh khớp (low[v] >= tin[u]).

Mô tả bài toán

Hạ tầng mạng viễn thông của AI Empire Academy gồm N trạm máy chủ (1 ≤ N ≤ 105) và M đường cáp quang nối trực tiếp (1 ≤ M ≤ 2 · 105). Đồ thị là vô hướng, có thể không liên thông, không có khuyên (self-loop) nhưng có thể có đa cạnh.

Một đường cáp (u, v) được gọi là Cầu nếu ngắt nó sẽ làm tăng số thành phần liên thông của mạng. Một trạm máy chủ u được gọi là Khớp nếu ngắt nó (cùng toàn bộ các đường cáp nối vào nó) sẽ làm tăng số thành phần liên thông.

Hãy đếm số lượng đỉnh khớp và số lượng cạnh cầu của đồ thị.

Quy ước nộp bài

  • Chỉ cần viết một chương trình đọc stdin và in ra stdout. Bài này không yêu cầu viết hàm.
  • Không dùng cout để in lời nhắc trước khi đọc dữ liệu. Lời nhắc sẽ lọt vào stdout và làm bài sai.
  • Chỉ in đúng nội dung ở mục Output. Không in thêm nhãn, dòng trống hay ký tự thừa.
  • Output được so khớp từng ký tự, phân biệt chữ hoa/thường và dấu câu.

Input

  • Dòng 1: Gồm 2 số nguyên N và M (1 ≤ N ≤ 105, 0 ≤ M ≤ 2 · 105).
  • M dòng tiếp theo: Mỗi dòng gồm 2 số nguyên u, v (1 ≤ u, v ≤ N, u ≠ v) đại diện cho một đường cáp giữa trạm u và v.

Output

  • In ra hai số nguyên trên một dòng cách nhau bởi dấu cách: Số lượng đỉnh khớp và số lượng cạnh cầu.

Ràng buộc

  • 1 ≤ N ≤ 105.
  • 0 ≤ M ≤ 2 · 105.
  • Thời gian chạy: 1000ms.
  • Bộ nhớ tối đa: 256MB.

Ví dụ 1

Input

5 5
1 2
2 3
3 1
3 4
4 5

Output

2 2
*Giải thích:*
- Các khớp là đỉnh 3 và đỉnh 4 (tổng cộng 2 khớp).
- Các cầu là cạnh (3, 4) và cạnh (4, 5) (tổng cộng 2 cầu).

Ví dụ 2

Input

4 4
1 2
2 3
3 4
4 1

Output

0 0
*Giải thích:* Đồ thị tạo thành chu trình 4 đỉnh, không có trạm hay đường cáp nào bị ngắt mà làm đứt mạng.
3 cấp độ gợi ýMở dần khi bạn thật sự cần hỗ trợ.
Phân tích lời giảiGiải thích hướng tư duy và thuật toán.
Code tham khảoDùng để đối chiếu sau khi tự làm.

Gợi ý và lời giải chỉ mở sau khi bạn bấm Nộp bài. Giáo viên và quản trị viên mở được ngay.