妙妙 DP 题

Luogu P5904

给定一棵 n 节点的树,求有多少个三元节点对使得任意两个点之间距离相等。n105

高端的题目,往往只需要朴素的题面。

经过观察得到,满足上述条件的节点对在有根树中只有两种形态:

对于左面一种形态,我们设 fu,i 表示 u 子树内与 u 距离为 i 的节点的个数。

对于右面一种形态,我们设 gu,i 表示:

上图中,(A,B,C) 构成一个合法三元组,Cu 之间距离为 i 的二元组 (A,B) 个数。通俗地说,A,B 已经凑成一对了,只要 u 往外走 i 步能找到一个点 C,那么 (A,B,C) 就构成了一个合法三元组。

先让我们想想如何统计答案。

首先,所有的 gu,0 应该被累加进答案中。这对应着这种情况:

其次,对于所有的 p,qsonu,pq,fp,i1×gq,i+1 应该被累加进答案中。这对应着这种情况:

这种情况的合法性不难想到,qC 距离为 i+1,此时 A,B 正好需要一个从 q 往外走 i+1 步的一个点,也就是 C

把这两种情况统计好即可做到不重不漏。

再思考如何转移。

对于 fu,i,有 fu,i=vsonufv,i1,fu,0=1

这是不难想到的。关键在于 gu,i 的转移。

首先,所有的 vsonu,gv,i+1 是要累加进 gu,i 的。这对应着这种情况:

v 需要往外找 i+1 步,因为 uv 外面一步,所以 u 需要往外找 i 步,对应 gu,i

其次,对于所有的 p,qu,pq,fp,i1×fq,i1 应该被累加进 gu,i 中,这对应着这种情况:

此时,我们所有的工作就圆满完成了。

posted @   Linge_Zzzz  阅读(3)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示