만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

트리와 수열

면접 대비

시간 제한2초메모리 제한1024 MB

요약
트리의 간선에 수열의 값을 하나씩 배정해 모든 정점 쌍 거리의 합을 최소로 만드는 문제입니다.
난이도

보통10점 중 4점

유형
그리디, 트리, 정렬
정답자
아직 제출이 없습니다

문제

정점이 NN개인 트리가 있다. 정점은 1번부터 NN번까지 번호가 매겨져 있다. 또한 N−1N-1개의 음이 아닌 정수로 이루어진 수열이 있다.

트리의 간선에 수열의 원소를 하나씩 대응시켜 가중치를 매긴다. 이렇게 매길 수 있는 ∑dist(i,j)\sum dist(i,j) (1≤i<j≤N)(1 \le i < j \le N)의 최솟값을 109+710^9+7로 나눈 나머지를 구한다.

dist(i,j)dist(i,j)는 트리에서 ii번 정점과 jj번 정점 사이의 단순 경로에 있는 간선 가중치의 합이다.

입력

첫 번째 줄에 정점의 개수 NN이 주어진다. (2≤N≤100 000)(2 \le N \le 100\ 000)

이후 N−1N-1개의 줄에 걸쳐 각 간선이 잇는 두 정점 uu, vv가 공백으로 구분되어 주어진다. (1≤u,v≤N)(1 \le u, v \le N)

다음 줄에 수열의 원소 a1,⋯ ,aN−1a_1, \cdots, a_{N-1}이 공백으로 구분되어 주어진다. (1≤ai≤109;(1 \le a_i \le 10^9; 모든 aia_i는 정수))

출력

∑dist(i,j)\sum dist(i,j) (1≤i<j≤N)(1 \le i < j \le N)의 최솟값을 109+710^9+7로 나눈 나머지를 출력한다.

예제1

  1. 예제 1

    입력
    5
    1 2
    2 4
    2 3
    1 5
    3 1 4 1
    
    예상 출력
    38