题意:
首先n为1e6,优先找规律。我们可以发现,边长都为1,最后的答案只跟树的结构有关。所以从数学的角度出发找公式。
设 为x,y两点的距离,
为x点的深度,
,
.
由LCA的知识我们知道:
那么
上面右式总共分为五个部分:我们一个一个来分析.
对于%E5%92%8Cf%5E2(y)%3A)
对于
显然,前三项可以最后再算。
对于
,不好直接处理,那么我们枚举
对于上面式子, 显然我们只需要找到树中的所有点对数.
根据容斥定理我们可以发现一棵树中以某一点为
的x,y的点对数为
.
关于式子的理解:首先,如果(x,y)两个点在i的不同子树中或其中一点为i点,那么就会有贡献。
,需要减去处在同一颗子树里的点对
.
对于
有:
根据上式我们还需要知道.
关于式子的理解:点对(x,y),我们按子树来考虑每个点对答案的贡献.
心得:
①数据量大,又发现边长为1,优先从数学(找规律)的角度出发优化时间复杂度.
②在边长固定为1的情况下求一棵树的所有路径和dis(x,y),将其转化为lca去思考.
③记得取模问题,开long long ,该取模的都要取模!!
AC代码:
https://ac.nowcoder.com/acm/contest/view-submission?submissionId=42517431