Cây khung nhỏ nhất

Xem PDF




Tác giả:
Dạng bài
Ngôn ngữ cho phép
C++
Điểm: 2100 (p) Thời gian: 1.0s Bộ nhớ: 256M Input: bàn phím Output: màn hình

Cho một đồ thị vô hướng, có trọng số, liên thông gồm \(N\) đỉnh và \(M\) cạnh. Ta nhận được \(Q\) truy vấn. Mỗi truy vấn chứa một tập các cạnh \(S_i \subset \{1, 2, \dots, M\}\).

Yêu cầu: Với mỗi truy vấn, hãy kiểm tra xem liệu có tồn tại ít nhất một cây khung nhỏ nhất (MST) của đồ thị chứa toàn bộ các cạnh trong tập \(S_i\) hay không.

Input

  • Dòng đầu tiên chứa hai số nguyên \(N, M\) (\(2 \leq N, M \leq 5\cdot 10^5\), \(N-1 \leq M\)) lần lượt là số đỉnh và số cạnh của đồ thị.
  • \(M\) dòng tiếp theo, dòng thứ \(i\) chứa ba số nguyên \(u_i, v_i, w_i\) (\(u_i \neq v_i, 1 \leq w_i \leq 10^5\)) tương ứng là hai đỉnh đầu mút và trọng số của cạnh thứ \(i\). Có thể có đa cạnh giữa hai đỉnh bất kỳ. Đảm bảo đồ thị đã cho là liên thông.
  • Dòng tiếp theo chứa một số nguyên \(Q\) (\(1 \leq Q \leq 5\cdot 10^5\)) là số lượng truy vấn.
  • \(Q\) dòng tiếp theo biểu diễn các truy vấn. Dòng thứ \(i\) bắt đầu bằng một số nguyên \(k_i\) (\(1 \leq k_i \leq N-1\)) là kích thước của tập cạnh truy vấn, theo sau là \(k_i\) số nguyên phân biệt trong khoảng từ \(1\) đến \(M\) là chỉ số của các cạnh.
  • Đảm bảo tổng của \(k_i\) qua tất cả \(Q\) truy vấn không vượt quá \(5\cdot 10^5\).

Output

  • Với mỗi truy vấn, in ra YES (không có dấu ngoặc kép) nếu tồn tại ít nhất một MST chứa tất cả các cạnh trong truy vấn đó, ngược lại in ra NO.

Example

Test 1

Input
5 7
1 2 2
1 3 2
2 3 1
2 4 1
3 4 1
3 5 2
4 5 2
4
2 3 4
3 3 4 5
2 1 7
2 1 2
Output
YES
NO
YES
NO

Bình luận

Mới nhất
Tải bình luận...

Không có bình luận nào.