其他分享
首页 > 其他分享> > 树的直径

树的直径

作者:互联网

给定一棵树,树中每条边都有一个权值,树中两点之间的距离定义为连接两点的路径边权之和。树中最远的两个节点之间的距离被称为树的直径,连接这两点的路径被称为树的最长链。后者通常也可称为直径,即直径是一个 数值概念,也可代指一条路径。

树的直径求法

树形DP

 1 void dp(int x) {
 2     v[x] = 1;
 3     for(int i = head[x]; i; i = net[i]) {
 4         int y = ver[i];
 5         if(v[y]) continue;
 6         dp(y);
 7         ans = max(ans, d[x] + d[y] + edge[i]);
 8         d[x] = max(d[x], d[y] + edge[i]);
 9     }
10 }

 

二次搜索

  1. 从任一点开始遍历,找到最远点p;
  2. 从p开始再次遍历,找到最远点q

原理:p到q就是树的一条直径。因为p必然是直径的一端,否则总能找到一条更长的链,这与直径的定义矛盾。

标签:int,edge,ans,直径,树中,最远
来源: https://www.cnblogs.com/g-xf/p/11257831.html