题目连接
- 树形DP专题
题目大意
- 一个数字n,求n以内的数字之间 “约数和关系” 的最长链;
- 约数和关系:一个数字 x x x 的约数和为 s [ x ] s[x] s[x] ;
题目分析
- 由 约数和关系 可以想到,如果 s [ x ] < x s[x]<x s[x]<x ,他们之间可以连一条双向边;题目就转换为了一个树上,求直径。
- 直径的定义: 树上最长的链。
- 求树的直径的方法1:用两次dfs来完成
d f s 1 dfs1 dfs1 从根出发,找到最远的叶子结点 k k k;
d f s 2 dfs2 dfs2 以 k k k 为根,出发,找到离他最远的点 t t t , k k k 与 t t t 之间的距离就是直径。 - 求直径的做法2:dp的思维来实现
搜索的过程中,同时记录最长链与次长链,回溯的时候更新。
解题思路1:两次 d f s dfs dfs 求直径
- 如果 s [ x ] < x s[x]<x s[x]