통행 차단

트리와 추가 가중 간선이 주어질 때, 각 트리 간선을 제거해 생기는 두 조각을 다시 연결하는 추가 간선의 최소 가중치를 구한다.

어려움8트리DFS유니온 파인드정렬아직 제출이 없습니다시간 제한2초메모리 제한512 MB

문제

농부 존의 농장에는 목초지가 NN개 있고(2N50,0002 \leq N \leq 50{,}000), 길이가 1인 양방향 길 N1N-1개가 목초지를 잇는다. 이 길만 따라가도 어느 목초지에서 어느 목초지로든 갈 수 있다.

농장은 연결되어 있지만, 존은 길 하나가 막히는 상황을 걱정한다. 길 하나가 막히면 농장은 목초지 두 무리로 갈라지고, 소는 같은 무리 안에서만 오갈 수 있다. 그래서 존은 양방향 길 MM개를 더 놓는다(1M50,0001 \leq M \leq 50{,}000). 새로 놓은 길의 길이는 10910^9 이하의 양의 정수다. 소는 원래 있던 길 중 하나가 막히기 전까지는 원래 있던 길만 쓴다.

원래 있던 길 하나가 막히면 농장은 두 조각으로 갈라진다. 존은 새로 놓은 길 중 하나를 골라 두 조각을 다시 이어서, 소가 다시 어느 목초지에서 어느 목초지로든 갈 수 있게 한다.

원래 있던 길마다 그 길을 대신할 가장 짧은 길의 길이를 구하라.

입력

첫째 줄에 NNMM이 주어진다. 다음 N1N-1개 줄에는 원래 있던 길이 정수 pp, qq로 주어진다. 두 목초지 ppqq를 잇는 길이고, pqp \neq q이며 두 값은 11 이상 NN 이하다. 이어지는 MM개 줄에는 새로 놓은 길이 정수 pp, qq, rr로 주어진다. 목초지 ppqq를 잇고 길이가 rr인 길이다. 두 목초지 사이에 놓인 길은 많아야 하나다.

출력

N1N-1개 줄을 출력한다. ii번째 줄에는 입력에서 ii번째로 주어진 원래 길이 막혔을 때 농장을 다시 잇는 가장 짧은 새 길의 길이를 출력한다. 대신할 길이 없으면 -1을 출력한다.