下见代码
#include<bits/stdc++.h>
using namespace std;
long long n,a[20010],cnt,ans[20010];
vector<int> q[20010];
int dfs(int dep,int st,int fa,int ys)
{
if(dep == 2)
{
ans[++cnt] = a[ys] * a[st];
}
for(int i:q[st])
{
if(i == fa)
{
continue;
}
dfs(dep + 1,i,st,ys);
}
return 0;
}
int main()
{
cin>>n;
for(int i = 1;i < n;i++)
{
int to,from;
cin>>from>>to;
q[from].push_back(to);
q[to].push_back(from);
}
for(int i = 1;i <= n;i++)
{
cin>>a[i];
}
for(int i = 1;i <= n;i++)
{
dfs(0,i,i,i);
}
long long maxa = ans[1],all = 0;
for(int i = 1;i <= cnt;i++)
{
maxa = max(maxa,ans[i]);
all += ans[i];
all %= 10007;
}
cout<<maxa<<" "<<all % 10007;
return 0;
}