欢迎访问~原文出处——博客园-zhouzhendong

去博客园看该题解


题目传送门 - Vijos1906


题意概括

  有一棵树,每一个节点都有一个权值w[i]。下面说的x,y都是该树中的节点。

  对于点对(x,y),x,y,保证x和y距离为2,那么他们就可以联合,会产生w[x]*w[y]的联合权值。

  注意:点对(x,y)和(y,x)是不同的。

  现在要回答两个问题:

  1. 所有可以联合的点对的最大联合权值。

  2. 对于所有不同的点对(x,y),求联合权值和,答案对10007取模。


题解

  在一棵树上?

  首先看完体面,觉得像一道树形dp题。

  其实就是一道树形dp题。

  

  我们按照dfs的顺序,首先,我们考虑较简单的一部分。

  对于询问2,我可以先计算一半(点对的逆序也算不同)。

  对于节点x,我们分成两种大情况考虑:

  1. 它与它的儿子的儿子的联合权值。

  2. 它的儿子和它的儿子的联合权值。

  首先考虑第一种。

  做法:

    对于每一个节点,设置两个数组:sum[i]和Max[i],分别表示其子节点的权值和与最大权值。

    这两个量是非常好维护的。

    那么如何统计?

    对于每一个节点,把它和它的儿子的儿子联合即可 —— 两次联合,分别对应两种询问,一次与儿子的sum结合,一次与儿子的Max结合。

  然后第二种:

    对于sum,其实很简单,对于当前累加的部分sum[rt](rt为当前节点),直接联合累加即可。

    不解释,自己看代码。

    那么max也差不多。

代码

#include <cstring>
#include <algorithm>
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <vector>
using namespace std;
const int N=+,M=N*,mod=;
vector <int> son[N];
int n,w[N],sum[N],Max[N],ansMax,anssum;
void dfs(int prev,int rt){
sum[rt]=Max[rt]=;
for (int i=;i<son[rt].size();i++)
if (son[rt][i]!=prev){
int v=son[rt][i];
dfs(rt,v);
anssum=(anssum+w[rt]*sum[v])%mod;
ansMax=max(ansMax,w[rt]*Max[v]);
anssum=(anssum+sum[rt]*w[v])%mod;
ansMax=max(ansMax,w[v]*Max[rt]);
sum[rt]=(sum[rt]+w[v])%mod;
Max[rt]=max(Max[rt],w[v]);
}
}
int main(){
scanf("%d",&n);
for (int i=;i<=n;i++)
son[i].clear();
for (int i=,a,b;i<n;i++){
scanf("%d%d",&a,&b);
son[a].push_back(b);
son[b].push_back(a);
}
for (int i=;i<=n;i++)
scanf("%d",&w[i]);
ansMax=anssum=;
dfs(,);
printf("%d %d",ansMax,anssum*%mod);
return ;
}

Vijos1906 联合权值 NOIP2014Day1T2 树形动态规划的更多相关文章

  1. P1351 联合权值(树形dp)

    P1351 联合权值 想刷道水题还交了3次.....丢人 (1.没想到有两个点都是儿子的状况 2.到处乱%(大雾)) 先dfs一遍处理出父亲$fa[x]$ 蓝后再一遍dfs,搞搞就出来了. #incl ...

  2. vijos1906:联合权值

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

  3. 【题解】洛谷P1351 [NOIP2014TG] 联合权值(树形结构+DFS)

    题目来源:洛谷P1351 思路 由题意可得图为一棵树 在一棵树上距离为2的两个点有两种情况 当前点与其爷爷 当前点的两个儿子 当情况为当前点与其爷爷时比较好操作 只需要在传递时不仅传递父亲 还传递爷爷 ...

  4. 【树形DP】【P1351】 【NOIP2014D1T2】联合权值

    传送门 Description 无向连通图 \(G\) 有 \(n\) 个点, \(n-1\) 条边.点从 \(1\) 到 \(n\) 依次编号,编号为 \(i\) 的点的权值为 \(W_i\) ,每 ...

  5. [noip2014day1-T2]联合权值

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

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

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

  7. $Noip2014/Luogu1351$ 联合权值 树形

    $Luogu$ $Description$ 给定一棵树,每两个距离为$2$的点之间可以产生"联合权值","联合权值"定义为这两个数的乘积.求最大的联合权值以及所 ...

  8. P1351 联合权值[鬼畜解法]

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

  9. Codevs 3728 联合权值

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

随机推荐

  1. 20155332 2016-2017-2 《Java程序设计》第7周学习总结

    20155332 2016-2017-2 <Java程序设计>第7周学习总结 教材学习内容总结 了解Lambda语法 了解方法引用 了解Fucntional与Stream API 掌握Da ...

  2. 数据库之MySQL存储过程

    一.参考文献 https://www.oschina.net/translate/create-and-call-mysql-stored-procedure-database-sql-example ...

  3. TCP网络编程

    TCP网络编程  与UDP不同的是TCP是通过客服端和服务端的方式来传输数据的.客服端:public class TCPClient { /**     * @param args     * @th ...

  4. Gitlab8.5安装后邮件发送不成功的解决过程

    Gitlab安装成功有,注册邮件一直接收不到也是很生气,修改了 /etc/gitlab/gitlab.rb文件 gitlab_rails['smtp_enable'] = truegitlab_rai ...

  5. redis的底层数据机构

    集群架构 参考 https://blog.csdn.net/wcf373722432/article/details/78678504 https://www.cnblogs.com/George19 ...

  6. Java ArrayList类

    ArrayList对象可以用于存储一个对象列表 例子: ArrayList<String> list = new ArrayList<String>() 例子: public ...

  7. 使用SpringSecurity保护方法应用

    (1)pom添加依赖 <dependency> <groupId>org.springframework.security</groupId> <artifa ...

  8. 配置使用OpenCV静态链接库

    配置opencv静态链接库需要用到:staticlib 在配置链接器->附加库目录时应该为staticlib的路径.同理若是利用动态链接库则只需要lib的路径: 动态链接库则使用lib,然而在使 ...

  9. eclipse中运行项目出现空白错误提示解决办法

    别人所给出的解决办法:https://blog.csdn.net/fzdg2019/article/details/79384539 两个办法: 方法一:配置环境变量 方法二:修改eclipse安装目 ...

  10. maven配置文件setting.xml

    1.Maven本地仓库<localRepository>D:\DevTools\maven_Analytics\mavenrepo</localRepository> 2.网络 ...