急急急!!!70pts!3 TLE!求调!
查看原帖
急急急!!!70pts!3 TLE!求调!
889828
Wangbingxiang楼主2024/10/24 22:36
#include<bits/stdc++.h>
using namespace std;
const long long N = 1000010;
long long c;
long long n,d[N];
long long x,y;
long long head[N*2],tot;
long long sum,ans[N];
struct Edge{
	long long to,nxt;
}e[N*2];
void add(long long u,long long v){
	e[++tot].to=v;
	e[tot].nxt=head[u];
	head[u]=tot;
}
void dfs_dp(long long u,long long f){
	for(long long i=head[u];i;i=e[i].nxt){
		long long v=e[i].to;
		if(v==f) continue;
		for(long long j=i;j;j=e[j].nxt){
			long long vv=e[j].to;
			if(vv==v || vv==f) continue;
			ans[vv]+=d[vv]*d[v];
			ans[v]+=d[vv]*d[v];
			c=max(c,d[vv]*d[v]);
		}
		ans[v]+=d[f]*d[v];
		ans[f]+=d[f]*d[v];
		c=max(c,d[f]*d[v]);
		dfs_dp(v,u);
	}
}
int main(){
	scanf("%lld",&n);
	for(long long i=1;i<n;i++){
		scanf("%lld%lld",&x,&y);
		add(x,y);
		add(y,x);
	}
	for(long long i=1;i<=n;i++) scanf("%lld",&d[i]);
	dfs_dp(1,0);
    for(long long i=1;i<=n;i++){
    	sum+=ans[i];
	}
	cout<<c<<" "<<sum%10007;
	return 0;
}

2024/10/24 22:36
加载中...