canuc80k5105·6/17

Ngưỡng Liên Thông

Nộp bài trên LQDOJ

Bài 51 · Parallel Binary Search

Cho một đồ thị vô hướng gồm đỉnh và cạnh có trọng số. Với một ngưỡng , ta chỉ giữ những cạnh có trọng số không vượt quá .

Mỗi truy vấn cho hai đỉnh khác nhau và . Hãy tìm giá trị nhỏ nhất để và liên thông trong đồ thị được giữ lại. Khi tồn tại giá trị đó, gọi là số đỉnh trong thành phần liên thông chứa và sau khi tất cả cạnh có trọng số không vượt đã được thêm; hãy in cả và .

Nhiều cạnh có thể có cùng trọng số. Vì vậy, kích thước luôn được xác định sau khi xử lý trọn vẹn nhóm cạnh có trọng số , không phụ thuộc thứ tự các cạnh trong nhóm.

Input

  • Dòng đầu chứa hai số nguyên và .
  • dòng tiếp theo, mỗi dòng chứa mô tả cạnh vô hướng giữa và có trọng số .
  • Dòng tiếp theo chứa số truy vấn .
  • dòng cuối, mỗi dòng chứa hai đỉnh và khác nhau.

Output

  • Với mỗi truy vấn, nếu hai đỉnh không thể liên thông thì in ; ngược lại in hai số và , trong đó là ngưỡng nhỏ nhất và là kích thước thành phần sau khi thêm tất cả cạnh có trọng số không vượt .

Constraints

  • .
  • ; và .
  • .
  • Đồ thị có thể có nhiều cạnh cùng trọng số và không nhất thiết liên thông.

Scoring

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

Example

Test 1

Input

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

Output

7 4
10 6
2 2
10 6
-1

Giải thích: Ở ngưỡng , cả hai cạnh trọng số đã được thêm nên các đỉnh tạo thành một thành phần có kích thước . Ngưỡng nối sáu đỉnh đầu, còn đỉnh luôn cô lập nên truy vấn cuối nhận .

Lời giải tóm tắt
  • Ý tưởng: Sắp các cạnh theo trọng số và gom các cạnh bằng nhau thành một nhóm. Miền tìm kiếm của mỗi truy vấn là chỉ số nhóm, vì trạng thái tại ngưỡng W phải chứa toàn bộ cạnh có trọng số W.
  • Ý tưởng: Mỗi truy vấn giữ lo=-1 và hi=G, với G là sentinel “chưa liên thông”. Trong một vòng parallel binary search, gom truy vấn theo midpoint. Reset DSU, quét các nhóm tăng dần, hợp nhất trọn nhóm rồi mới kiểm tra bucket. Hai đầu cùng gốc thì hạ hi, ngược lại nâng lo.
  • Ý tưởng: Sau khi hội tụ, quét các nhóm thêm một lần. Ở nhóm đáp án của truy vấn, kích thước của gốc DSU chính là S. Nếu đáp án vẫn là sentinel G, in -1.
  • Độ phức tạp: O(m log m + (m+q) log m · α(n)) thời gian và O(n+m+q) bộ nhớ.