求调,玄关
查看原帖
求调,玄关
1367000
Ybll_楼主2024/9/26 14:57
#include<bits/stdc++.h>
using namespace std;
struct node
{
	long long sum,fa;
};
long long a,w[200005],ansm=-1,ans=0,mod=10007;
bool vis[200005];
vector<long long>v[200005];
void bfs()
{
	queue<node>q;
	long long id=1;
	q.push({1ll,0});
	while(q.size())
	{
		long long sum=0,ma1=0,ma2=0;
		for(long long i=0;i<v[q.front().sum].size();i++)
		{
			if(vis[v[q.front().sum][i]])continue;
			q.push({v[q.front().sum][i],q.front().sum});
			sum+=w[v[q.front().sum][i]];
			if(w[v[q.front().sum][i]]>ma2)
			{
				ma1=ma2;
				ma2=w[v[q.front().sum][i]];
			}
		}
		ansm=max(max(ansm,ma2*ma1),w[q.front().fa]*ma2);
		for(long long i=0;i<v[q.front().sum].size();i++)
		{
			if(vis[v[q.front().sum][i]])continue;
			sum-=w[v[q.front().sum][i]];
			ans+=sum*2*v[q.front().sum][i];
			ans%=mod;
			ans+=w[v[q.front().sum][i]]*w[q.front().fa]*2;
			ans%=mod;
		}
		vis[q.front().sum]=1;
		q.pop();
	}
}
int main()
{
//	freopen("link.in","r",stdin);
//	freopen("link.out","w",stdout);
	cin>>a;
	for(long long i=1;i<a;i++)
	{
		long long k,j;
		cin>>k>>j;
		v[k].push_back(j);
		v[j].push_back(k);
	}
	for(long long i=1;i<=a;i++)
	{
		cin>>w[i];
	}
	bfs();
	cout<<ansm<<" "<<ans;
	return 0;
}
2024/9/26 14:57
加载中...