树的直径—树中的最长简单路径
方法:
1) 传统的:两遍BFS(DFS)
第一次从任意结点u出发,求出它的最远点s(这个点一定是直径的端点)
第二次从s出发,找到s的最远点t,s-t即所求。
性质一:设起点为u,第一次BFS找到的终点v一定是树的直径的一个端点
证明:http://www.cnblogs.com/wuyiqi/archive/2012/04/08/2437424.html
2) DP:用tree-dp求出所有结点到其叶子结点的最长距离f[i]和次长距离g[i],MAX{ f[i] + g[i] }即所求。
性质二:树的直径的长度一定会是某个点的最长距离f[i]与次长距离g[i]之和
3) 图论里的多源最短路求法
4) topsort里的寻找关键路径的算法