Description:
给你一棵树,每个点有权值,你可以修改一些点的权值使得:
1.每个点权值等于子节点权值的和
2.每个点的所有子节点权值相等
Hint:
\(n \le 2*10^6\)
Solution:
比较巧妙的题
首先有一个很显然的规律:
当一个点权值确定,整棵树就确定了 (为什么这么显然的规律没有想到)
然后我们考虑转化求对于每个点不改它,对应的树的形态
我们找出哪种树的形态\(i\)被计的最多,答案就是\(n-cnt_i\)
于是\(f[i]=a[i]*\prod_{j\in {anc_i} } son[j]\)
dfs之后sort一遍就行
但是这样会炸,要把乘换成加法\(-> log(x*y)=log(x)+log(y)\)
#include