canuc80k3718·19/50

Cạnh Thử Trong Cây Khung

Nộp bài trên LQDOJ

Bài 37 · Minimum Spanning Tree

Cho một đồ thị vô hướng liên thông gồm đỉnh và cạnh. Cạnh thứ nối với , có trọng số . Khuyên và cạnh song song có thể xuất hiện, nhưng trọng số của cạnh gốc đôi một khác nhau.

Có truy vấn. Truy vấn thứ cho một cạnh thử , trong đó khác trọng số của mọi cạnh gốc. Với riêng truy vấn này, hãy thêm cạnh thử vào đồ thị gốc rồi xét cây khung nhỏ nhất của đồ thị mới. Do mọi trọng số trong đồ thị mới đều khác nhau, cây khung nhỏ nhất là duy nhất.

Hãy cho biết cạnh thử có nằm trong cây khung nhỏ nhất duy nhất đó hay không. Các truy vấn độc lập với nhau: cạnh thử của một truy vấn không được giữ lại cho truy vấn khác.

Input

  • Dòng đầu chứa ba số nguyên .
  • Mỗi dòng trong dòng tiếp theo chứa ba số nguyên , mô tả một cạnh gốc.
  • Mỗi dòng trong dòng tiếp theo chứa ba số nguyên , mô tả một cạnh thử.

Output

  • In dòng. Dòng thứ in Yes nếu cạnh thử của truy vấn nằm trong cây khung nhỏ nhất sau khi thêm nó, ngược lại in No.

Constraints

  • .
  • .
  • .
  • .
  • .
  • Đồ thị gốc liên thông; khuyên và cạnh song song có thể xuất hiện.
  • Các giá trị đôi một khác nhau.
  • Với mọi truy vấn và mọi cạnh gốc .

Scoring

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

Example

Test 1

Input

5 6 5
1 2 2
2 3 5
1 3 9
3 4 12
4 5 15
2 5 20
1 3 1
1 3 3
1 3 7
2 4 10
1 5 25

Output

Yes
Yes
No
Yes
No

Giải thích: Với trọng số hoặc , cạnh thử 1-3 được chọn trước khi hai đầu đã nối bằng các cạnh gốc nhẹ hơn; với trọng số , đường 1-2-3 đã có trọng số cạnh tối đa là nên cạnh thử không được chọn. Hai truy vấn còn lại lần lượt thay được cạnh trọng số và không thay được cạnh nào trên đường nối tương ứng.

Lời giải tóm tắt
  • Ý tưởng: Xét một truy vấn có trọng số w. Cạnh thử được chọn vào MST duy nhất khi và chỉ khi trước khi Kruskal xét trọng số w, hai đầu của nó còn thuộc hai thành phần khác nhau. Nếu chúng đã nối bằng các cạnh gốc nhẹ hơn w, thêm cạnh thử tạo một chu trình mà cạnh thử là nặng nhất nên không thể nằm trong MST. Nếu chưa nối, cạnh thử là cạnh nhẹ nhất qua một lát cắt thích hợp và bắt buộc được chọn.
  • Ý tưởng: Gộp cạnh gốc và truy vấn thành các sự kiện, sắp tăng theo trọng số. Khi gặp cạnh gốc, hợp nhất hai đầu bằng DSU. Khi gặp truy vấn, chỉ kiểm tra hai đại diện và không thay đổi DSU, vì các truy vấn độc lập. Contract bảo đảm trọng số truy vấn không trùng trọng số cạnh gốc; vẫn đặt truy vấn trước cạnh gốc khi bằng nhau để biểu diễn đúng trạng thái “chỉ các cạnh nhẹ hơn”.
  • Ý tưởng: Độ phức tạp là O((m+q) log(m+q)) thời gian và O(n+m+q) bộ nhớ.
  • Ý tưởng: Mỗi dòng kết quả đúng với việc hai đầu đã hay chưa được nối chỉ bằng các cạnh gốc nhẹ hơn trọng số truy vấn.