小䓤的树
题号:NC222915
时间限制:C/C++/Rust/Pascal 2秒,其他语言4秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

给定一棵树,点有点权,要求你重新构建这棵树,使得这棵树在代价最小的情况下满足除了权值最小的点外,每个点都有一个权值比它小的点与它相邻。计算代价的方法如下:

一个点的代价为
,其中 表示点 u 的度数,即与 u 直接相连的节点数。
一条边 (u,v)的代价为 ,其中 为 u 和 v 在原树中的距离。
一棵树的代价为点的代价 + 边的代价。

输入描述:

第一行一个数 n ,表示 n 个点的树。

第二行 n 个数表示每个点的点权a_u

接下来 n-1 行每行两个整数x,y表示树上有一条连接x,y的边

输出描述:

一行一个数表示最小代价
示例1

输入

复制
3
1 2 3
1 2
1 3

输出

复制
9

说明

一种最优策略为:
连边 (1,2),(1,3),其点的代价为2\times1+1\times 2+1\times 3=7 边的代价为 1\times 1+1\times 1=2,总代价为 7+2=9 ,可以发现没有更优的策略。
示例2

输入

复制
5
4 5 3 7 8
1 2
1 3
3 4
4 5

输出

复制
53

备注: