시간 제한 | 메모리 제한 | 제출 | 정답 | 맞힌 사람 | 정답 비율 |
---|---|---|---|---|---|
2 초 (하단 참고) | 512 MB | 16 | 8 | 5 | 45.455% |
Bob은 최근 트리를 이용한 점수 놀이를 즐겨하는데, 임의의 트리 $S$에 대한 점수 ($Score(S)$)는 아래와 같이 정의한다:
예를 들어, 아래의 트리에는 노드가 $3$개 있다.
Alice는 Bob의 놀이를 지켜보던 중 새로운 놀이를 제안했다. 우선, 둘은 함께 $n$개의 노드와 $n-1$개의 간선으로 구성된 트리를 하나 만드는데, 이를 $T_0$라 하고 "기본 트리"라 부른다. 편의상 기본 트리 $T_0$의 노드는 $1$부터 $n$까지 번호가 붙어있고, $n-1$개의 간선도 $1$부터 $n-1$까지 번호가 붙어있다 (이는 후술할 "간선 바꾸기"에 사용되는 간선의 인덱스이다). $T_0$의 $i$번째 간선을 $E[i] = (v, w, d)$라 하면, 이 간선은 노드 $v$와 노드 $w$를 잇고, 길이가 $d$인 간선을 나타낸다. 예를 들어, $E[1] = (1, 2, 10)$, $E[2] = (2, 3, 20)$ 이라면, 위 그림과 같은 트리가 얻어지고, 구체적으로 $(1, 2)$를 잇는 간선의 인덱스는 $1$이고 $(2, 3)$을 잇는 간선의 인덱스는 $2$이다.
이후, Alice가 "간선 바꾸기"를 $T_0$에 적용하면, Alice가 원하는 간선 하나를 $T_0$에서 지운 뒤, 새로운 간선을 하나 추가하여 새로운 트리를 만든다. 구체적으로, Alice는 총 $m$번의 "간선 바꾸기"를 시도해서 $T_0$으로부터 $m$개의 새로운 트리를 얻어내는데 이를 $T_1$, $T_2$, $\dots$, $T_m$이라 하자.
예를 들어 기본 트리인 $T_0$은 앞선 예제와 같이 $E[1] = (1, 2, 10)$, $E[2] = (2, 3, 20)$으로 구성된 트리라 하자. Alice가 총 $m = 4$번에 걸쳐 간선 바꾸기를 적용하는데, $A = [1, 1, 2, 2]$, $x = [3, 1, 2, 3]$, $y = [1, 3, 3, 1]$, $z = [1, 20, 30, 30]$이라 하자. 아래 $4$개의 그림은 좌측부터 순서대로 $1$~$4$번째 "간선 바꾸기"를 $T_0$에 각각 적용해서 얻어진 $T_j$와 해당 트리의 점수를 나타낸다. 그림에서 점선으로 표시된 간선은 "삭제된" 간선을 나타내고, 두꺼운 선으로 표시된 간선은 "추가된" 간선을 나타낸다.
입력으로 기본 트리 ($T_0$)와 $m$번의 "간선 바꾸기"에 대한 정보가 주어졌을 때, Bob을 도와 각 트리의 점수를 구해보자. 단, Alice는 Bob의 편의를 위해 총 $3$개의 값만 구해보라고 했다: $T_0$의 점수, $1$~$m$번째 변형트리 ($T_1$, $\dots$, $T_m$) 점수들의 최솟값과 최댓값을 구하면 된다.
첫 줄에 테스트 케이스의 수 $T$가 주어진다.
각 테스트 케이스의 첫 줄에는 $n$과 $m$이 공백으로 구분되어 주어진다. 다음 $n-1$줄에 걸쳐 $T_0$의 간선에 대한 정보가 $1$번 간선부터 $n-1$번 간선까지, 각 줄에 $3$개의 정수로 나뉘어 주어진다: 처음 $2$개의 정수는 노드 번호이고 세 번째 정수는 간선의 길이이다. 다음 $m$줄에 걸쳐 각 줄에 $4$개의 정수가 주어진다: Alice가 적용할 $j$번째 "간선 바꾸기"에 사용될 $A[ j ]$, $x[ j ]$, $y[ j ]$, $z[ j ]$ 값이 공백으로 구분되어 주어진다.
각 테스트 케이스의 정답을 각 줄에 출력한다.
각 줄에는 세 개의 정수가 공백으로 구분되어 출력되어야 한다. 첫 정수는 기본 트리 $T_0$의 점수, 두 번째 정수는 $1$~$m$번째 변형 트리 ($T_1$, $\dots$, $T_m$) 점수 중 최솟값, 그리고 세 번째 정수는 $1$~$m$ 번째 변형 트리 ($T_1$, $\dots$, $T_m$) 점수 중 최댓값을 출력한다.
각 테스트 케이스에 대하여:
트리의 "지름 (diameter)"을 다음과 같이 정의한다: 트리의 임의의 두 노드 $x$, $y$를 잇는 최단경로를 $P(x, y)$라 하고, 이에 속한 간선의 개수를 $C(x, y)$라 하자. 트리의 지름은 $C(x, y)$ 값들 중 최댓값이다.
5 3 4 1 2 10 2 3 20 1 3 1 1 1 1 3 20 2 2 3 30 2 3 1 30 10 1 1 2 2 1 3 2 2 9 3 3 4 3 8 7 2 7 6 3 6 4 4 4 5 4 10 9 4 7 8 10 10 9 2 1 2 3 1 3 2 2 4 2 3 8 1 9 3 2 5 8 3 6 8 2 7 8 3 4 8 2 10 4 4 5 10 7 5 3 4 20 2 5 10 1 5 30 4 5 40 6 7 50 7 1 60 1 3 5 1 1 3 2 1 1 3 7 1 1 3 6 1 1 3 4 1 2 3 1 2 1 1 1 2 2 1 2 1 3 1 1 2 4
60 42 80 435 614 614 194 378 432 1840 1566 1886 1 2 4
예제 1: 본문에서 다루었다. 이 트리의 지름은 $2$이다 (최단 경로 중 간선의 개수가 가장 많은 것은 $1$ -- $2$ -- $3$ 이다).
예제 2: 아래 그림은 $T_0$을 나타낸다. 이 트리의 지름은 $8$이다 (최단 경로 중 간선의 개수가 가장 많은 것은 $10$ -- $9$ -- $2$ -- $1$ -- $3$ -- $4$ -- $6$ -- $7$ -- $8$ 이다).
이 트리에서 $7$번째로 주어진 간선인 $(6, 4)$를 삭제하고 대신 길이가 $10$인 간선 $(8, 10)$을 추가한 트리 ($T_1$)은 아래와 같다.
$T_0$의 점수는 $435$이고, $T_1$의 점수가 $614$이므로 이 경우 최솟값/최댓값 모두 $614$가 된다.
예제 3, 4: 추가 설명 없음.
예제 5: $T_0$의 점수는 $1$이다. $Score(T_1) = 2$, $Score(T_2) = 3$, $Score(T_3) = 4$ 이므로 최솟값 최댓값은 각각 $2$와 $4$가 된다.