trang chủ / đề bài / linkcutcent

Cắt và nối cạnh để có một trọng tâm

Đề bài

Mô tả

Cho một cây gồm n đỉnh. Một đỉnh được gọi là trọng tâm của cây nếu khi xoá đỉnh đó (cùng mọi cạnh kề với nó), kích thước thành phần liên thông lớn nhất của đồ thị còn lại là nhỏ nhất có thể. Một cây có thể có nhiều hơn một trọng tâm.

Bạn phải thực hiện đúng hai thao tác theo thứ tự: xoá một cạnh của cây, sau đó thêm một cạnh. Đồ thị thu được sau hai thao tác phải là một cây. Được phép thêm lại chính cạnh vừa xoá.

Hãy thực hiện hai thao tác sao cho cây thu được có đúng một trọng tâm. Có thể chứng minh rằng luôn tồn tại cách làm như vậy.

Dữ liệu vào

Dòng đầu tiên chứa số nguyên t, số bộ dữ liệu.

Mỗi bộ dữ liệu gồm:

  • Dòng đầu chứa số nguyên n, số đỉnh của cây.
  • n−1 dòng tiếp theo, mỗi dòng chứa hai số nguyên x,y thể hiện một cạnh nối đỉnh x và đỉnh y.

Dữ liệu đảm bảo đồ thị cho là một cây.

Dữ liệu ra

Với mỗi bộ dữ liệu, in ra hai dòng:

  • Dòng thứ nhất gồm hai số nguyên x1,y1: xoá cạnh nối x1 và y1. Cạnh này phải tồn tại trong cây.
  • Dòng thứ hai gồm hai số nguyên x2,y2: thêm cạnh nối x2 và y2.

Nếu có nhiều đáp án, in ra đáp án bất kỳ.

Ràng buộc

  • 1≤t≤104
  • 3≤n≤105
  • 1≤x,y≤n
  • Tổng n trên tất cả các bộ dữ liệu không vượt quá 105.

Ví dụ

Input Output Giải thích
2
5
1 2
1 3
2 4
2 5
6
1 2
1 3
1 4
2 5
2 6
2 5
2 5
2 5
1 5
Cây thứ nhất có duy nhất trọng tâm là đỉnh 2, nên xoá rồi thêm lại cùng một cạnh là đủ. Cây thứ hai có hai trọng tâm 1 và 2; sau khi xoá cạnh (2,5) và thêm cạnh (1,5), đỉnh 1 là trọng tâm duy nhất.
1
4
1 2
2 3
3 4
3 4
2 4
Đường đi 1−2−3−4 có hai trọng tâm 2 và 3. Sau khi xoá cạnh (3,4) và thêm cạnh (2,4), ta được cây hình sao tâm 2, có trọng tâm duy nhất là 2.

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