Cây Giáng sinh XOR

Đề bài

Mô tả

Cho một câyn đỉnh và n1 cạnh. Mỗi cạnh được gắn một giá trị nguyên không âm v với 0v<230. Tuy nhiên, một số giá trị đã bị quên — với những cạnh đó, v=1.

m truy vấn. Truy vấn thứ i gồm hai đỉnh ai, bi và một bit chẵn lẻ pi{0,1}. Gọi XiXOR của tất cả các giá trị trên các cạnh thuộc đường đi đơn từ ai đến bi. Khi đó, truy vấn yêu cầu số lượng bit 1 trong biểu diễn nhị phân của Xi có tính chẵn lẻ bằng pi, nghĩa là popcount(Xi)mod2=pi.

Hãy xác định xem có thể chọn giá trị cho các cạnh chưa biết (mỗi giá trị nằm trong [0,230)) sao cho mọi truy vấn đều đúng hay không. Nếu có, in ra một cách gán hợp lệ; những cạnh đã biết phải giữ nguyên giá trị.

Dữ liệu vào

Dòng đầu chứa số nguyên t — số bộ test (1t2·104). Mỗi bộ test có cấu trúc như sau:

  • Dòng đầu chứa hai số nm (2n2·105; 1m2·105).
  • n1 dòng tiếp theo, mỗi dòng chứa ba số x, y, v (1x,yn; 1v<230) mô tả một cạnh giữa đỉnh xy. Nếu v=1 thì giá trị cạnh chưa biết; nếu v0 thì cạnh có giá trị v.
  • m dòng tiếp theo, mỗi dòng chứa ba số a, b, p (1a,bn; ab; 0p1).

Tổng n trên tất cả các bộ test không vượt quá 2·105. Tổng m trên tất cả các bộ test cũng không vượt quá 2·105. Các cạnh được đảm bảo tạo thành một cây.

Dữ liệu ra

Với mỗi bộ test:

  • In YES nếu tồn tại cách gán hợp lệ, sau đó in n1 dòng, mỗi dòng ba số x, y, v (0v<230) — tập các cạnh phải trùng với đầu vào (xét không thứ tự), giá trị các cạnh đã biết phải giữ nguyên. Có thể in cạnh theo bất kì thứ tự nào.
  • In NO nếu không tồn tại cách gán.

Nếu có nhiều đáp án, in ra bất cứ đáp án nào.

Ràng buộc

  • 1t2·104
  • 2n2·105, 1m2·105
  • Tổng n và tổng m trên toàn bộ các bộ test đều không vượt quá 2·105.
  • 1v<230 cho cạnh; 0p1 cho truy vấn.

Ví dụ

Input Output Giải thích
4
6 5
1 2 -1
1 3 1
4 2 7
6 3 0
2 5 -1
2 3 1
2 5 0
5 6 1
6 1 1
4 5 1
5 3
1 2 -1
1 3 -1
1 4 1
4 5 -1
2 4 0
3 4 1
2 3 1
3 3
1 2 -1
1 3 -1
1 2 0
1 3 1
2 3 0
2 1
1 2 1
1 2 0
YES
1 2 0
1 3 1
4 2 7
6 3 0
2 5 0
YES
1 2 1
1 3 0
1 4 1
4 5 1
NO
NO
Bộ test 1: gán cạnh (1,2)=0, (2,5)=0 thoả mãn — đường đi 23 qua cạnh (1,2) giá trị 0(1,3) giá trị 1, XOR =1, popcount lẻ → p=1 ✓. Bộ 3 và 4 không có cách gán nào hợp lệ (giá trị các cạnh đã bị ràng buộc mâu thuẫn).
2
3 2
1 2 5
2 3 -1
1 3 0
1 2 1
2 2
1 2 -1
1 2 0
1 2 1
NO
NO
Bộ 1: cạnh (1,2)=5 có popcount =2 (chẵn) nên truy vấn (1,2,1) đòi popcount lẻ là vô lý. Bộ 2: hai truy vấn cùng đỉnh (1,2) nhưng yêu cầu hai chẵn lẻ khác nhau, không thể đồng thời thoả.

Lưu ý: vì popcount(xy)popcount(x)+popcount(y)(mod2), chỉ duy nhất tính chẵn lẻ của mỗi cạnh là yếu tố quyết định. Bạn được tự do chọn giá trị cụ thể 0 hoặc 1 (hoặc bất cứ số nào có cùng chẵn lẻ) cho các cạnh chưa biết.

Bình luận

Không có bình luận tại thời điểm này.

gnatmake 12.2.0 a68g 3.1.2 nasm 2.16.1 as_x64 2.46 awk 1.3.4 gcc 16.1.0 csc 6.12.0.200 g++ 16.1.0 g++-themis 16.1.0 g++17 16.1.0 g++20 16.1.0 g++23 16.1.0 clang++ 22.1.6 dmd 2.112.0 dart 3.12.1 gforth 0.7.3 gfortran 12.2.0 go 1.26.3 groovyc 5.0.6 javac 25.0.3 node 26.2.0 kotlinc 2.3.21 sbcl 2.2.9 lua 5.4.8 nim 2.2.10 fpc 3.2.2 fpc-themis 3.2.2 perl 5.36.0 php 8.5.6 pike 8.0 pypy3 7.3.23 python3 3.14.5 racket 8.7 ruby 4.0.5 rustc 1.96.0 csc 5.3.0 ctoj-scratch 0.0.1 sed 4.9 tclsh 8.6 bun 1.3.14 deno 2.8.1 v 0.5.1 zig 0.16.0