60pts MLE 求调
查看原帖
60pts MLE 求调
715233
Dino_chx楼主2023/7/18 19:30
#include<bits/stdc++.h>
#define ll long long
#define P 10007
using namespace std;
const int N=2e5+7; 
vector<int> e[N],p[N];
int n,a[N],fa[N],gfa[N];
void dfs(int x,int Fa)
{
	fa[x]=Fa;
	if(Fa!=-1)
		gfa[x]=fa[Fa];
	for(auto it:e[x])
	{
		if(it!=Fa)
			dfs(it,x);
	}
	return;
}
void initp()
{
	for(int i=1;i<=n;i++)
	{
		if(~gfa[i])
			p[i].push_back(gfa[i]);
		if(~fa[i])
		{
			for(auto it:e[fa[i]])
			{
				if(it!=i)
					p[i].push_back(it);
			}
		}
	}
	return;
}
int main()
{
//	freopen("P1351_2.in","r",stdin);     
//	freopen("my.out","w",stdout); 
	scanf("%d",&n);
	for(int i=1,u,v;i<n;i++)
	{
		scanf("%d%d",&u,&v);
		e[u].push_back(v);
		e[v].push_back(u);
	}
	for(int i=1;i<=n;i++)
	{
		scanf("%d",&a[i]);
	}
	gfa[1]=-1;
	dfs(1,-1);
	initp();
	ll maxn=LONG_LONG_MIN,ans=0;
	for(int i=1;i<=n;i++)
	{
		for(auto it:p[i])
		{
			ans=(ans+(a[i]*a[it]))%P;
			maxn=max(maxn,(ll)a[i]*a[it]);
		}
	}
	printf("%lld %lld",maxn,ans%P);
    return 0;
}
2023/7/18 19:30
加载中...