trang chủ / đề bài / treemerg

Tree Merging

Đề bài

Mô tả

Bessie viết một trình hiển thị cây có gốc, trong đó mỗi nút mang một giá trị và các giá trị đôi một khác nhau. Trình hiển thị chỉ hỗ trợ duy nhất một thao tác: phép gộp.

Một phép gộp chọn hai nút khác nhau đang có cùng cha và thay chúng bằng một nút duy nhất. Nút mới mang giá trị bằng giá trị lớn hơn trong hai nút được chọn, và nhận tất cả các con của cả hai nút làm con của nó. Gốc của cây không bao giờ tham gia phép gộp (gốc không có cha).

Cho cây ban đầu gồm N nút mang các giá trị 1,2,…,N và cây cuối gồm M nút, hãy tìm một dãy phép gộp biến cây ban đầu thành đúng cây cuối.

Dữ liệu vào

  • Dòng đầu: số nguyên T, số test case.
  • Với mỗi test case:
    • Dòng chứa N, số nút của cây ban đầu.
    • N−1 dòng, mỗi dòng hai số nguyên a và p cho biết nút p là cha của nút a trong cây ban đầu. Nút duy nhất không xuất hiện ở vị trí a chính là gốc.
    • Dòng chứa M, số nút của cây cuối.
    • M−1 dòng, mỗi dòng hai số nguyên a và p cho biết nút p là cha của nút a trong cây cuối.

Giá trị các nút của cây cuối là một tập con của {1,2,…,N}, và gốc của cây cuối trùng với gốc của cây ban đầu.

Dữ liệu ra

Với mỗi test case, in ra:

  • Dòng đầu: số phép gộp K.
  • K dòng tiếp theo, mỗi dòng hai số x và y: gộp hai nút đang mang giá trị x và y. Tại thời điểm thực hiện, hai nút này phải khác nhau, còn tồn tại và có cùng cha. Nút thu được mang giá trị max(x,y).

Mỗi phép gộp làm số nút giảm đúng 1, nên luôn có K=N−M. Có thể có nhiều dãy phép gộp hợp lệ, in ra dãy nào cũng được.

Ràng buộc

  • 1≤M≤N
  • Tổng N của tất cả test case trong một file dữ liệu không vượt quá 1000
  • Dữ liệu đảm bảo luôn tồn tại ít nhất một dãy phép gộp hợp lệ

Ví dụ

Input Output Giải thích
1
8
7 5
2 1
4 2
5 1
3 2
8 5
6 2
4
8 5
5 1
6 5
4
2 5
3 8
4 8
7 8
Cây ban đầu có gốc 1 với hai con 2,5; nút 2 có các con 3,4,6; nút 5 có các con 7,8. Gộp 2 với 5 được nút 5 có các con 3,4,6,7,8. Ba phép gộp tiếp theo dồn 3,4,7 vào 8, còn lại cây cuối: gốc 1, con 5, và 5 có hai con 6,8.
2
3
2 1
3 1
2
3 1
1
1
1
2 3
0
Test đầu: hai lá 2,3 cùng cha 1, gộp lại thành nút 3. Test sau chỉ có một nút nên không cần phép gộp nào.

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.47 awk 1.3.4 gcc 16.2.0 dotnet 10.0.402 g++ 16.2.0 g++-themis 16.2.0 g++17 16.2.0 g++20 16.2.0 g++23 16.2.0 clang++ 22.1.8 dmd 2.113.0 dart 3.13.6 gforth 0.7.3 gfortran 15.3.0 go 1.27.3 groovyc 5.1.3 javac 26.0.2.1 node 26.12.1 julia 1.13.2 kotlinc 2.4.21 lean 4.35.0 sbcl 2.2.9 lua 5.5.1 nim 2.2.12 fpc 3.2.2 fpc-themis 3.2.2 perl 5.42.3 php 8.5.12 pike 8.0 swipl 9.0.4 pypy3 7.3.23 python3 3.15.1 racket 8.7 ruby 4.0.8 rustc 1.99.1 csc 5.3.0 ctoj-scratch 0.0.1 sed 4.9 swiftc 6.4.1 tclsh 8.6 bun 1.4.4 deno 2.9.8 v 0.5.2 zig 0.17.0