比赛 近期练习题回顾 评测结果 AAAAAAAAAA
题目名称 联合权值 最终得分 100
用户昵称 @@@ 运行时间 0.559 s
代码语言 C++ 内存使用 29.02 MiB
提交时间 2018-10-25 10:08:42
显示代码纯文本
#include <fstream>
#include <vector>
// #include "iostream"
using namespace std;
ifstream cin("linkb.in");
ofstream cout("linkb.out");
vector <int> v[200001];
long long int n,ans,Max = -99999999;
long long int w[200001],t1[200001] ,t2[200001],t[200001];
long long int son[200001],max_son[200001],ci_son[200001];
//bool have_father[200001];
/*

搞一个数组
存每个节点的所有子节点的值和,还有最大的值




*/
int cyf()
{	
	int s,i;
	cin >> n;
	for ( i = 1; i < n; ++i)
	{
		//int ;
		cin >> t1[i] >> t2[i];
		v[t1[i]].push_back(t2[i]);
		v[t2[i]].push_back(t1[i]);
		//have_father[t2] = 1;
		// 
		/* code */
	}
	for(i = 1;i <= n;i++)
	{
		cin >> t[i];
		t[i] %= 10007;
		//son[t1[i]]+=t;
		//max_son[t1[i]] = max(max_son[t1[i]],t);
	}
	for(i = 1;i < n;i++)
	{
		son[t1[i]] += t[t2[i]];
		son[t2[i]] += t[t1[i]];
		/*
		if(t[t2[i]] > max_son[t1[i]])
		{
			ci_son[t1[i]] = max_son[t1[i]];
			max_son[t1[i]] = t[t2[i]];
		}
		else
		{
			if(t[t2[i]] > ci_son[t1[i]])
				ci_son[t1[i]] = t[t2[i]];
		}
		
		ci_son[t1[i]] = max(ci_son[t1[i]],t[t2[i]]);
		if(ci_son[t1[i]] > max_son[t1[i]])
		{
			int t = max_son[t1[i]];
			max_son[t1[i]] = ci_son[t1[i]];
			ci_son[t1[i]] = t;
		}
		*/
		//max_son[t1[i]] = max(max_son[t1[i]],t[t2[i]]);
		/*
		max_son[t2[i]] = max(max_son[t2[i]],t[t1[i]]);
		if(ci_son[t2[i]] > max_son[t2[i]])
		{
			int t = max_son[t2[i]];
			max_son[t2[i]] = ci_son[t2[i]];
			ci_son[t2[i]] = t;
		}
		
		if(t[t1[i]] > max_son[t2[i]])
		{
			ci_son[t2[i]] = max_son[t2[i]];
			max_son[t2[i]] = t[t2[i]];
		}
		else
		{
			if(t[t1[i]] > ci_son[t2[i]])
				ci_son[t2[i]] = t[t1[i]];
		}*/
		//max_son[t2[i]] = max(max_son[t2[i]],t[t1[i]]);
	}
	for(i = 1;i <= n;i++)
	{
		for(int k = 0;k < v[i].size();k++)
		{
			if(t[v[i][k]] > max_son[i])
			{
				ci_son[i] = max_son[i];
				max_son[i] = t[v[i][k]];
			}
			else
			{
				if(t[v[i][k]] > ci_son[i])
					ci_son[i] = t[v[i][k]];
			}
		}
	}
	for(i = 1;i <= n;i++)
	{
		for(int j = 0;j < v[i].size();j++)
		{
			if(t[i] == max_son[v[i][j]])
			{
				Max = max(Max,t[i]*(ci_son[v[i][j]]));
			}
			else
				Max = max(Max,t[i]*(max_son[v[i][j]]));
			ans += t[i]*(son[v[i][j]]-t[i]);
		}
	}
	cout << Max << ' ' << ans%10007;
	cin.close();	
	cout.close();
	return 0;
}
int hhhh = cyf();
int main() {;}