D. Truyền tin trên mạng (Mã bài: CNET)

Bộ nhớ: 256 MiB Thời gian: 1000 ms Nhập/xuất từ luồng chuẩn
Kiểu bài: Thông thường Kiểu chấm: So sánh văn bản

Đề bài

Cho một mạng gồm n máy tính đánh số từ 1 tới n m cáp nối đánh số từ 1 tới m . Cáp nối thứ i nối giữa hai máy tính u_i , v_i và cho phép truyền tin giữa hai máy theo cả hai chiều. Hai máy tính s t có thể kết nối được với nhau nếu tồn tại dãy các máy s = x_1, x_2, ..., x_k = t sao cho giữa hai máy (x_i, x_{i+1}) có cáp nối chúng (∀i = 1, 2, ..., k-1) . Mạng đảm bảo hai máy bất kỳ có thể kết nối được với nhau. Giữa hai máy tính có thể có nhiều hơn 1 cáp nối.

Ta nói máy u là xung yếu đối với cặp máy (s, t) nếu máy như máy u gặp sự cố (không thể tham gia truyền tin) thì hai máy s, t không thể kết nối với nhau (tính cả trường hợp u = s hoặc u = t ). Tương tự như vậy ta nói một cáp nối là xung yếu đối với cặp máy (s, t) nếu như cáp này gặp sự cố thì hai máy s, t không thể kết nối với nhau.

Yêu cầu: Cho q truy vấn, mỗi truy vấn cho bởi một cặp máy khác nhau (s, t) , hãy cho biết có bao nhiêu máy và cáp nối xung yếu đối với cặp máy (s, t) đó.

Dữ liệu:

  • Dòng 1 chứa số nguyên dương n \le 10^5 ; m \le 2 \cdot 10^5 ;
  • m dòng tiếp theo, dòng thứ i chứa hai số nguyên dương u_i, v_i
  • Dòng tiếp theo chứa số nguyên dương q \le 10^5 ;
  • q dòng tiếp theo, mỗi dòng chứa chỉ số hai máy khác nhau ứng với một truy vấn.

Kết quả: Ghi ra q dòng, mỗi dòng ghi hai số nguyên: Số thứ nhất là số máy xung yếu và số thứ hai là số cáp xung yếu đối với cặp máy trong một truy vấn theo đúng thứ tự trong dữ liệu vào.

Các số trên một dòng được/phải ghi cách nhau bởi dấu cách.

Ví dụ:

Dữ liệu:

6 7
1 2
1 4
1 5
2 4
3 5
3 6
5 6
2
2 4
4 3

Kết quả:

2 0
4 1

Hình minh họa