显示代码纯文本
#include <stdio.h>
int u[200010][2],w[200010],n,i,maxn,a,b,max[200010][2];
long long sumn,v[200010];
void work(int a,int b)
{
if(a>max[b][0])
{
max[b][1]=max[b][0];
max[b][0]=a;
}
else
if(a>max[b][1])
max[b][1]=a;
}
int main()
{
freopen("linkb.in","r",stdin);
freopen("linkb.out","w",stdout);
scanf("%d",&n);
for(i=1;i<n;i++)
scanf("%d%d",&u[i][0],&u[i][1]);
for(i=1;i<=n;i++)
scanf("%d",w+i);
for(i=1;i<n;i++)
{
a=u[i][0];
b=u[i][1];
v[a]+=w[b];
v[b]+=w[a];
work(w[a],b);
work(w[b],a);
}
maxn=sumn=0;
for(i=1;i<=n;i++)
if(max[i][0]*max[i][1]>maxn)
maxn=max[i][0]*max[i][1];
for(i=1;i<n;i++)
{
a=u[i][0];
b=u[i][1];
sumn=(sumn+(v[a]-w[b])*w[b]%10007)%10007;
sumn=(sumn+(v[b]-w[a])*w[a]%10007)%10007;
}
printf("%d %d",maxn,sumn);
return 0;
}