트리의 간선을 하나씩 지우며, 각 삭제마다 각 정점의 분노에 (삭제 전 도달 가능 수) - (삭제 후 도달 가능 수) + 1을 곱하고, 삭제 후 전체 분노의 합을 10^9+7로 나눈 나머지를 출력한다.
어려움8트리유니온 파인드수학구현아직 제출이 없습니다시간 제한4초메모리 제한512 MB섬 n개로 이루어진 나라가 있다. 섬은 다리 n−1개로 이어져 있고, 어떤 두 섬 사이에도 같은 섬을 두 번 지나지 않고 오가는 길이 정확히 하나뿐이다.
야만인이 이 나라를 공격했다. 다리가 약점이라는 것을 알아챈 야만인은 다리를 하나씩 차례로 끊는다. 섬 i에 사는 사람의 처음 분노는 ai이다.
다리 하나가 끊어질 때 분노는 이렇게 바뀐다. 섬 x를 보자. 다리가 끊어지기 전에 섬 x의 사람이 갈 수 있는 섬의 수를 a, 끊어진 뒤에 갈 수 있는 섬의 수를 b라고 하자. 두 값 모두 섬 x 자신을 포함한다. 그러면 섬 x의 분노에 a−b+1을 곱한다.
질문은 n−1개 들어온다. 각 질문은 정수 두 개 u와 v로 이루어진다. 직전 질문의 답을 res라고 하면, 이 질문이 끊는 다리는 섬 u+res와 섬 v+res를 잇는 다리다. 첫 질문에서는 res=0으로 본다.
그 다리를 끊은 뒤 섬 i의 분노를 bi라고 하자. (b1+b2+⋯+bn)을 109+7로 나눈 나머지를 새로운 res로 정하고, 그 값을 출력한다.
첫 번째 예제로 질문 형식을 확인해 보자. 섬이 5개이고 처음 분노는 1 2 3 4 5이다. 첫 질문은 res=0이므로 섬 3과 섬 1을 잇는 다리를 끊는다. 섬 1과 섬 2의 분노에는 4가 곱해지고 나머지 세 섬의 분노에는 3이 곱해져서 분노는 4 8 9 12 15가 된다. 합이 48이므로 res는 48이 되고 48을 출력한다. 다음 질문에 −47과 −46이 들어오면 실제로 끊는 다리는 섬 (−47)+48=1과 섬 (−46)+48=2를 잇는 다리다.
첫 줄에 섬의 수 n이 주어진다. (2≤n≤2×105)
둘째 줄에 처음 분노를 나타내는 정수 n개 a1,a2,…,an이 주어진다. (1≤ai≤109+6)
다음 n−1개 줄에 다리를 나타내는 정수 두 개 ui, vi가 주어진다. (1≤ui,vi≤n) 어떤 두 섬 사이에도 오가는 길이 정확히 하나뿐임이 보장된다.
다음 n−1개 줄에 질문이 문제에서 설명한 형식으로 하나씩 주어진다. 질문이 가리키는 다리는 항상 존재하고 아직 끊어지지 않았음이 보장되며, 그 다리의 두 끝 섬 번호는 모두 1 이상 n 이하다.
질문마다 res 값을 질문이 들어온 순서대로 한 줄에 하나씩 출력한다.