来源:Luogu P3174,JZOJ #460
题目描述
对于一棵树,我们可以将某条链和与该链相连的边抽出来,看上去就象成一个毛毛虫,点数越多,毛毛虫就越大。例如下图左边的树(图 1 1 1)抽出一部分就变成了右边的一个毛毛虫了(图 2 2 2)。
求最大的毛毛虫的大小。
解题思路
- 这道题其实是树的直径的一个变形,首先显然得找到树的最长路径(树的直径),然后在节点个数上加上与该链相连的边,就可以了;
- 这里我用的是树形dp,本蒟蒻不才,请谅解;
- 首先得预处理出 n u m [ i ] num[i] num[i] 表示 i i i 节点连接点的个数,这个在邻接表插入的时候就可以做好;
- 对于每一个父亲节点 x x x ,找到一个子节点 y y y ,用 d i s 1 dis1 dis1 和 d i s 2 dis2 dis2 找到以 x x x 为根的最长链长度和次长链长度。那么该如何更新 d i s [ x ] dis[x]