방 배정

시간 제한1초메모리 제한128 MB

요약
n-1명의 발명가가 고른 두 방 번호로 이루어진 그래프에서, 완전한 방 배정이 가능하도록 유지하면서 기대 평점을 최대화하는 자신의 코인 두 숫자를 선택하는 문제입니다.
난이도

어려움10점 중 9점

유형
그래프, 유니온 파인드, DFS
정답자
아직 제출이 없습니다

문제

전 세계의 발명가들이 한자리에 모이는 발명가 학회가 열렸다. 주최자는 모든 발명가에게 호텔 방을 정확히 하나씩 예약해 두었다. 그런데 발명가마다 묵고 싶은 방에 대한 선호가 달랐기 때문에, 주최자는 공정하게 방을 배정하기 위한 무작위 방법을 마련했다.

각 발명가는 서로 다른 두 방 번호를 동전의 양면에 하나씩 적는다. 그런 다음 각자 동전을 던져, 위를 향한 면에 적힌 방을 배정받는다. 만약 어떤 방이 두 명 이상에게 배정되면 모든 발명가가 동전을 다시 던진다. 모든 발명가가 서로 다른 방을 가질 때까지 이 과정을 반복한다.

이 절차는 오래 걸릴 수도 있고 영원히 끝나지 않을 수도 있지만, 한 가지 유용한 성질이 있다. 동전에 적힌 번호들과 모순되지 않는 모든 방 배정 중에서 하나를 균등한 확률로 고른다는 점이다.

주최자 자신도 방이 필요하며, 이왕이면 유리한 방을 얻고 싶다. 그는 각 방에 점수를 매길 수 있고(점수가 높을수록 좋다), 다른 모든 발명가가 이미 고른 두 방 번호를 알고 있는 상태에서 자신의 동전에 적을 서로 다른 두 방 번호를 정해야 한다. 그가 배정받을 방의 기대 점수를 최대로 만드는 두 번호를 골라라. 단, 모든 발명가를 서로 다른 방에 배정하는 것이 애초에 가능한 경우라면, 그 배정을 불가능하게 만드는 두 방을 골라서는 절대 안 된다.

입력

첫 줄에 테스트 케이스의 수 cc (1≤c≤2001 \le c \le 200)가 주어진다. 각 테스트 케이스는 다음과 같이 주어진다.

각 테스트 케이스의 첫 줄에는 발명가의 수이자 방의 수인 정수 nn (2≤n≤500002 \le n \le 50000)이 주어진다. 이어지는 n−1n - 1개의 줄에는 주최자를 제외한 나머지 발명가들이 고른 동전이 주어지며, 각 줄에는 그 발명가가 고른 두 방 번호 aa와 bb (1≤a<b≤n1 \le a < b \le n)가 주어진다. 마지막 줄에는 nn개의 정수 v1,…,vnv_1, \dots, v_n (1≤vi≤10000001 \le v_i \le 1000000)이 주어지고, viv_i는 주최자가 매긴 ii번 방의 점수이다.

출력

각 테스트 케이스마다, 주최자가 배정받을 방의 기대 점수를 최대로 만들기 위해 자신의 동전에 적어야 하는 서로 다른 두 방 번호 aa와 bb (a<ba < b)를 한 줄에 출력한다. 최적인 선택이 여러 개라면 aa가 가장 작은 것을, aa가 같다면 bb가 가장 작은 것을 출력한다. 모든 발명가를 서로 다른 방에 배정하는 것이 가능하도록 유지하면서 두 방을 고를 방법이 전혀 없다면, 대신 impossible을 출력한다.

예제4

  1. 예제 1

    입력
    3
    4
    1 2
    2 3
    1 3
    2 3 4 1
    3
    1 2
    2 3
    100 40 70
    5
    1 2
    1 2
    1 2
    3 4
    1 1 1 1 1
    
    예상 출력
    1 4
    1 3
    impossible
    
  2. 예제 2

    입력
    1
    2
    1 2
    5 3
    
    예상 출력
    1 2
    
  3. 예제 3

    입력
    1
    4
    1 2
    2 3
    3 4
    5 9 9 2
    
    예상 출력
    2 3
    
  4. 예제 4

    입력
    1
    6
    1 2
    2 3
    1 3
    4 5
    5 6
    10 20 30 40 50 60
    
    예상 출력
    1 6