树的直径教学思路
首先根据树的直径的性质,即它为树上两个最远点的距离,推出求解找出直径的两种方法.
1:两次遍历法.
适用条件:树上的边权必须为正,如果边权为负则不再适用
2:最长链加次长链
适用条件:边权可正可负,相较上一种方法,它可求解出关于子树更多的信息,例如求树上所有点,均找出它们的最远距离,就可用这种方法+换根法进行求解
其次对于直径的一些附加信息的求解,主要有
1:直径上包括哪些点
2:直径上包括哪些边
3:直径有多少条
再次,直径的简单拓展,主要有
1:半径的求法,所谓半径即某个点,它的最远点距离是最小的。这样当求2棵树或多棵树合并的时候,可以用到。(对应习题dream),另对于一个树,可求出它的半径,那如何求出所有子树的半径?
2:如果存在多条直径,则必然交于一点.(对应习题缩短树的直径)
3:树上所有点,其对应的最远点,必然为直径的某个端点.(对应习题树网的核)
最后,今后可能遇到的问题
1:当树上边权不断变化时,使用线段树等数据结构维护直径。。。CF1192B - Dynamic Diameter
2:直径与其它算法相结合,例如博弈论,构造法
3:虚树的直径,仙人掌树的直径
一些难题
snow的追寻
挺进
ctsc2017 网络
ioi2016 shortcut
cf1039d you are given a tree