题号:NC214189
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

一个有 n 个节点,n - 1条无向边的图,形成树的结构,所有边的权值为 1 ,有 k 个标记节点,定义:一个点的权值是所有标记点到该点的最短距离的平方和,对于树上任意两点u、v,f(u, v)=
u、v两点间的路径的最短距离长 + 经过的所有点的权值和(包括u, v两点),求最大值 f(u, v)。

输入描述:

第一行,两个整数 n,k。
第二行, k 个整数,表示 k 个标记节点。
接下来的 n - 1 行,每行两个整数u,v,表示节点u和节点v之间有一条边。

输出描述:

一个整数,表示最大值 f(u, v)。
示例1

输入

复制
5 2
1 3
1 2
2 3
1 4
4 5

输出

复制
44

说明

1...5号节点的权值分别为:4 2 4 10 20,f(3, 5)最大,值为44。

备注:

n <= 10^5,  k, u, v <= n