只过了#1,#3。悬棺
查看原帖
只过了#1,#3。悬棺
636442
yangyang1000楼主2023/8/2 20:02
#include<iostream>
using namespace std;

int n,ans,maxn,num,h[200005],w[200005];

struct node
{
	int u,v;
} a[400005];

void add(int x,int y)
{
	a[++num].u=h[x];
    a[num].v=y;
    h[x]=num;
}

int main()
{
	cin >> n;
	for(int i=1;i<n;i++)
	{
		int x,y;
		cin >> x >> y;
		add(x,y);
		add(y,x);
	}
	
	for(int i=1;i<=n;i++)
		cin >> w[i];
	
	for(int i=1;i<=n;i++)
	{
		int max1 = 0,max2 = 0,t1 = 0,t2 = 0;
		for(int j=h[i];j;j = a[j].u)
		{
			if(w[a[i].v] > max1)
			{
				max2 = max1;
				max1 = w[a[j].v];
			}
			else if(w[a[i].v] > max2)
			{
				max2 = w[a[j].v];
			}
			t1 = (t1 + w[a[j].v]) % 10007;
			t2 = (t2 + w[a[j].v] * w[a[j].v]) % 10007;
		}
		t1 = t1 * t1 % 10007;
		ans = (ans + t1 + 10007 - t2) % 10007;
		if(maxn < max1 * max2) maxn = max1 * max2;
	}
	cout << maxn << " " << ans << endl;
	return 0;
}
2023/8/2 20:02
加载中...