QOJ.ac

QOJ

Limite de temps : 10 s Limite de mémoire : 512 MB Points totaux : 100

#857. 사회적 거리두기

Statistiques

학생들에 대해 두 가지 사실을 말할 수 있습니다. 그들은 필요한 것보다 더 많은 일을 하는 것을 싫어하며, 다른 사람들과 거리를 두는 것을 좋아합니다. 전자는 아마도 학과 건물이 트리 구조를 이루는 이유일 것입니다(간접적으로 연결된 두 방 사이에 복도를 만드는 것은 시간 낭비일 것입니다). 후자는 진행 중인 팬데믹 상황에서 그들이 잘 지내는 이유입니다. 이제 사회적 거리두기는 사치가 아니라 규범입니다!

하지만 트리 구조의 건물과 거리두기는 서로 잘 맞지 않습니다. 현재 일부 방에 $k$명의 학생들이 있으며, 거리두기 정책으로 인해 한 방에는 최대 한 명의 학생만 있을 수 있습니다. 더 나아가, 직접 복도로 연결된 두 방에는 두 명의 학생이 있을 수 없습니다.

ICPC 대회가 곧 시작되려 하고, 학생들은 학과 곳곳에 흩어져 있는 컴퓨터를 차지하기 위해 서두릅니다. 학생 수만큼의 컴퓨터가 일부 방에 위치해 있습니다. 또한, 거리두기를 가능하게 하기 위해 두 컴퓨터가 같은 방에 위치하지 않으며, 직접 연결된 두 방 모두에 컴퓨터가 있지도 않습니다. 학생들은 임의로 컴퓨터를 배정받을 수 있지만, 항상 사회적 거리두기를 유지해야 합니다. 따라서 그들을 원하는 곳으로 이동시키는 것은 불가능하지는 않더라도 까다로울 수 있습니다.

당신은 냉혹한 ICPC 조직자이자 궁극의 킬러 문제 세트 제작자입니다. 학생들이 정신없이 뛰어다니는 것을 보며 당신은 끔찍한 진실을 깨닫습니다. 만약 학생들이 제시간에 자신의 방에 도착하지 못하면 대회에 참가할 수 없게 되고, 따라서 풀 수 없는 문제를 준비하느라 고생한 모든 노력이 수포로 돌아갈 것입니다! 당신은 분명히 이를 허용할 수 없습니다.

학생들의 현재 위치와 컴퓨터들의 위치가 주어질 때, 모든 학생을 컴퓨터가 있는 방으로 이동시키는 일련의 조작을 설계하십시오. 모든 조작은 학생을 인접한 방으로 이동시켜야 합니다. 모든 조작 후에는 어떤 두 학생도 같은 방에 있거나 인접한 두 방에 있어서는 안 됩니다. 대회 시작 전까지 남은 시간 동안 당신은 최대 $4n^2$번의 이동을 수행할 수 있습니다. 여기서 $n$은 방의 개수입니다. 당신의 작업이 불가능할 수도 있지만, 이를 확인할 방법은 단 하나뿐입니다...

입력

입력의 첫 번째 줄에는 테스트 케이스의 수 $z$ ($1 \le z \le 100\,000$)가 포함됩니다. 각 테스트 케이스에 대한 설명이 이어집니다.

각 테스트 케이스의 첫 번째 줄에는 학과의 방 개수를 나타내는 단일 정수 $n$ ($2 \le n \le 2\,000$)이 포함됩니다.

다음 $n-1$개의 줄에는 복도로 연결된 두 방을 나타내는 두 정수 $u_i, v_i$ ($1 \le u_i \neq v_i \le n$)가 포함됩니다. 설명된 복도들은 트리(사이클이 없는 연결 그래프)를 형성함이 보장됩니다.

다음 줄에는 학생(및 컴퓨터)의 수를 나타내는 단일 정수 $k$ ($1 \le k < n$)가 포함됩니다.

다음 줄에는 학생들의 초기 위치를 나타내는 정수 $s_1, \dots, s_k$ ($1 \le s_1 < s_2 < \dots < s_k \le n$)가 포함됩니다.

다음 줄에는 컴퓨터가 있는 방을 나타내는 정수 $c_1, \dots, c_k$가 유사한 형식으로 포함됩니다.

컴퓨터가 없는 방에 위치한 학생이 적어도 한 명 있음이 보장됩니다.

모든 테스트 케이스에 대한 $n^2$의 합은 $4 \cdot 10^7$을 초과하지 않습니다.

출력

각 테스트 케이스에 대해, 사회적 거리두기를 유지하면서 학생들을 컴퓨터가 있는 방으로 이동시키는 것이 가능하다면 "YES"를 출력하고, 그렇지 않다면 "NO"를 출력하십시오. 가능하다면, 다음 줄에 유효한 해결책을 출력하십시오.

해결책 설명은 이동 횟수를 나타내는 단일 정수 $m$ ($1 \le m \le 4 \cdot n^2$)으로 시작해야 합니다. 그 후 $m$개의 줄이 이어져야 하며, 각 줄은 두 정수 $a_i, b_i$ ($1 \le a_i \neq b_i \le n$)를 사용하여 단일 이동을 설명합니다. 이는 현재 방 $a_i$에 있는 학생이 복도로 연결된 방 $b_i$로 이동해야 함을 의미합니다.

해결책의 길이를 최소화할 필요는 없습니다.

예제

입력 1

2
5
1 2
1 3
2 4
2 5
2
1 4
1 5
7
1 2
2 3
2 4
4 6
6 5
6 7
3
1 4 5
3 4 7

출력 1

YES
4
1 3
4 2
2 5
3 1
NO

Editorials

IDTypeStatusTitlePosted ByLast UpdatedActions
#538Editorial Open集训队作业 解题报告 by 李秉霈Qingyu2026-01-02 21:54:26 Download
#184EditorialOpen题解jiangly2025-12-12 23:58:16View

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.