比赛 |
近期练习题回顾 |
评测结果 |
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() {;}