https://www.luogu.org/problem/show?pid=1351

既然是一棵树,就先转化成有根树。有根树上距离为2的点对,路径可能长下面这样:

枚举路径上的中间点X。

第一种情况

对于点X(X的儿子数≥2),它的每一个儿子i与其他的儿子对权值和的贡献为Wi*(sum-Wi),则这个点所有儿子之间对权值和的贡献为:∑Wi*(sum-Wi),其中sum为点X所有儿子的权值之和。(貌似还有更高效的算法?)

对于点X (X的儿子数≥2),它的所有儿子之间可以产生的联合权值的最大值,肯定为所有儿子里面权值最大的×权值第二大的。贪心即可。

第二种情况

对于点X(除根节点和叶子节点),它的父亲与它的所有儿子之间对权值和的总贡献为:2*Wfather*sum,其中sum为点X所有儿子的权值之和。因为要求的是有序点对,所以要乘2。

对于点X(除根节点和叶子节点),它的父亲与它的所有儿子之间产生的联合权值的最大值,肯定为它的儿子里面权值最大的乘以它的父亲的权值。贪心即可。

实际代码时发现不用特意转化为有根树,只需要一遍深搜。

对于每个点,判断它的儿子数时,如果不是根则等于这个点的度数-1,如果是根则等于这个点的度数。

统计每个点对权值和的贡献,并维护最大权值。

#include <iostream>
#include <vector>
#define maxn 200005
typedef long long llint;
using namespace std;
const llint inf = 0x7fffffffffffffffll, c = ;
int n;
vector<int> t[maxn];
llint weight[maxn];
llint tot = ;
llint maxlink = -inf;
void dfs(int k, int fa)
{
llint sum = ;
llint maxson[] = {-inf, -inf};
for (int i = ; i < t[k].size(); i++)
{
if (t[k][i] != fa)
{
sum = (sum + weight[t[k][i]]) % c;
if (weight[t[k][i]] > maxson[])
{
maxson[] = maxson[];
maxson[] = weight[t[k][i]];
}
else if (weight[t[k][i]] > maxson[])
{
maxson[] = weight[t[k][i]];
}
dfs(t[k][i], k);
}
}
if (t[k].size() >= + (fa != ? : ))
{
for (int i = ; i < t[k].size(); i++)
if (t[k][i] != fa)
tot = (tot + (sum - weight[t[k][i]] + c) % c * weight[t[k][i]] % c) % c;
// tot = tot + (sum - weight[t[k][i]]) * weight[t[k][i]]
maxlink = max(maxlink, maxson[] * maxson[]);
}
if (fa != && t[k].size() >= )
{
tot = (tot + * weight[fa] % c * sum % c) % c;
maxlink = max(maxlink, maxson[] * weight[fa]);
}
}
int main()
{
int a, b;
cin >> n;
for (int i = ; i < n; i++)
{
cin >> a >> b;
t[a].push_back(b);
t[b].push_back(a);
}
for (int i = ; i <= n; i++)
{
cin >> weight[i];
}
dfs(, );
cout << maxlink << ' ' << tot << endl;
return ;
}

【NOIP2014提高组】联合权值的更多相关文章

  1. 【学术篇】luogu1351 [NOIP2014提高组] 联合权值

    一道提高组的题..... 传送门:题目在这里.... 现在都懒得更自己的blog了,怕是太颓废了_ (:з」∠) _ 好久没做题了,手都生了.(好吧其实是做题方面手太生了) 这题我都不想讲了,把代码一 ...

  2. NOIP2014提高组 联合权值(距离为2的树形dp)

    联合权值 题目描述 无向连通图 GG 有 nn 个点,n-1n−1 条边.点从 11 到 nn 依次编号,编号为 ii 的点的权值为 W_iWi​,每条边的长度均为 11.图上两点 (u, v)(u, ...

  3. [NOIP2014提高组]联合权值

    题目:洛谷P1351.Vijos P1906.codevs3728.UOJ#16. 题目大意:有一个无向连通图,有n个点n-1条边,每个点有一个权值$W_i$,每条边长度为1.规定两个距离为2的点i和 ...

  4. [NOIp2014] luogu P1351 联合权值

    哎我博 4 了. 题目描述 无向连通图 GGG 有 nnn 个点,n−1n−1n−1 条边.点从 111 到 nnn 依次编号,编号为 iii 的点的权值为 WiW_iWi​,每条边的长度均为 111 ...

  5. [NOIP2014] 提高组 洛谷P1351 联合权值

    题目描述 无向连通图G 有n 个点,n - 1 条边.点从1 到n 依次编号,编号为 i 的点的权值为W i ,每条边的长度均为1 .图上两点( u , v ) 的距离定义为u 点到v 点的最短距离. ...

  6. Noip2014 提高组 T2 联合权值 连通图+技巧

    联合权值 描述 无向连通图 G 有 n 个点,n-1 条边.点从 1 到 n 依次编号,编号为 i 的点的权值为 WiWi, 每条边的长度均为 1.图上两点(u, v)的距离定义为 u 点到 v 点的 ...

  7. NOIP2014提高组第二题联合权值

    还是先看题吧: 试题描述  无向连通图 G 有 n 个点,n-1 条边.点从 1 到 n 依次编号,编号为 i 的点的权值为 Wi ,每条边的长度均为 1.图上两点(u, v)的距离定义为 u 点到 ...

  8. NOIP 提高组 2014 联合权值(图论???)

    传送门 https://www.cnblogs.com/violet-acmer/p/9937201.html 题解: 相关变量解释: int n; int fa[maxn];//fa[i] : i的 ...

  9. 题解【luoguP1351 NOIp提高组2014 联合权值】

    题目链接 题意:给定一个无根树,每个点有一个权值.若两个点 \(i,j\) 之间距离为\(2\),则有联合权值 \(w_i \times w_j\).求所有的联合权值的和与最大值 分析: 暴力求,每个 ...

随机推荐

  1. Linux学习(十三)du、df、fdisk磁盘分区

    一.du du命令是查看文件或者目录大小的命令. 一般使用du -sh 查看,不用-sh参数意义也不大,应为不用这个参数,它会把目录下的所有文件大小递归的显示出来,就像这样: 如果用-sh参数: [r ...

  2. Leetcode题解(四)

    12/13.Integer to Roman/Roman to Integer 题目 罗马数字规则: 符号 I V X L C D M 数字 1 5 10 50 100 500 1000 代码如下: ...

  3. poj 1254 Hansel and Grethel

    Hansel and Grethel Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 2199   Accepted: 100 ...

  4. 2016 湖南省省赛 Problem A: 2016

    Problem A: 2016 Time Limit: 5 Sec  Memory Limit: 128 MBSubmit: 296  Solved: 171 Description  给出正整数 n ...

  5. Eddy's picture(最小生成树)

    Eddy's picture Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Tota ...

  6. javabean 和 xml 互转

    1.场景描述 将javabean对象转换为xml字符串,将xml字符串转换为javabean对象. 2.maven依赖 <dependency> <groupId>jdom&l ...

  7. 在浏览器里点击input输入框输入,会展示默认的历史下拉菜单

    给input设置autocomplete="off"属性可解决此问题

  8. C++中模板template <typename T>

    最近在看C++的源码,遇到了不少问题,一点一点进行补充. 首先就是遇到template <typename Dtype>. 网上解释的非常多,觉得比较啰嗦,其实就是一个类型模板. 比如我们 ...

  9. Nginx HTTP 核心模块

    原文链接:http://blog.chinaunix.net/xmlrpc.php?r=blog/article&uid=17238776&id=2982697aio 语法:aio [ ...

  10. html 自定义标签使用实现方法

    通过指定html命名空间的名字来定义自定义标签:默认的一些标签p div等都在html默认的命名空间下.而自定义的标签可以放在自定义的命名空间下,可通过xmlns:命名空间名 来指定,而自定义标签需要 ...