trang chủ / bài tập / xorforest

Khôi phục khu rừng từ XOR

Đề bài

Mô tả

Một khu rừng là một đồ thị vô hướng không có chu trình (không có cạnh khuyên và không có cạnh song song). Khu rừng gồm n đỉnh được đánh số từ 0 đến n1.

Với mỗi đỉnh v, người ta ghi lại hai số nguyên:

  • degreev: số đỉnh kề với v.
  • sv: tổng XOR (phép hoặc loại trừ theo bit) của chỉ số các đỉnh kề với v. Nếu v không có đỉnh kề nào thì sv=0.

Từ các giá trị degreevsv, hãy khôi phục lại các cạnh của khu rừng ban đầu.

Dữ liệu bảo đảm luôn tồn tại một khu rừng tương ứng với các số đã cho.

Dữ liệu vào

  • Dòng đầu tiên chứa số nguyên n: số đỉnh của đồ thị.
  • Trong n dòng tiếp theo, dòng thứ i (ứng với đỉnh i1) chứa hai số nguyên degreei1si1 cách nhau bởi dấu cách.

Dữ liệu ra

  • Dòng đầu tiên in ra số nguyên m: số cạnh của đồ thị.
  • Trong m dòng tiếp theo, mỗi dòng in ra hai số nguyên phân biệt ab biểu thị một cạnh nối đỉnh a và đỉnh b.

Các cạnh có thể in theo thứ tự bất kỳ; hai đỉnh của một cạnh cũng có thể in theo thứ tự bất kỳ.

Ràng buộc

  • 1n216
  • 0degreein1
  • 0si<216

Ví dụ

Input Output Giải thích
3
2 3
1 0
1 0
2
1 0
2 0
Đỉnh 0 kề với đỉnh 1 và 2 nên degree0=2, s0=12=3. Đỉnh 1 và đỉnh 2 mỗi đỉnh chỉ kề với đỉnh 0.
2
1 1
1 0
1
0 1
Chỉ có một cạnh nối đỉnh 0 và đỉnh 1. Khi đó s0=1s1=0.

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