90pts 玄关
查看原帖
90pts 玄关
1030785
wangtingmu楼主2024/7/7 17:01
#include<bits/stdc++.h>
using namespace std;
const int maxn=2e5+5,mod=10007;
long long n,v[maxn];
vector<int > g[maxn];
long long ans=0;
long long max_=-1;
void dfs(int num,int fa){
	long long sum1=0,sum2=0;
	long long zd=0,cd=0;
	for(int i=0;i<g[num].size();i++){
		if(g[num][i]!=fa){
			if(v[g[num][i]]>zd) zd=v[g[num][i]];
			else cd=max(cd,v[g[num][i]]);
			dfs(g[num][i],num);
			ans=(ans+2*v[fa]*v[g[num][i]])%mod;
			max_=max(v[fa]*v[g[num][i]],max_);
			sum1=(sum1+v[g[num][i]])%mod;
			sum2=(sum2+v[g[num][i]]*v[g[num][i]])%mod;
		}
	}
	ans=(ans+(sum1*sum1)-sum2)%mod;
	max_=max(zd*cd,max_);
}
int main(){
	cin>>n;
	for(int i=1;i<=n-1;i++){
		int x,y;
		cin>>x>>y;
		g[x].push_back(y);
		g[y].push_back(x);
	}
	for(int i=1;i<=n;i++) cin>>v[i];
	dfs(1,0);
	cout<<max_<<" "<<ans<<endl;
	return 0;
}
```cpp
2024/7/7 17:01
加载中...