一棵树的直径如何计算? 20
8个回答
展开全部
树形dp啊,,
设1号节点为根,"N个点N-1条边的无向图"就可以看做“有根树”
设d[x]表示从节点x出发走向以x为根的子树,能够到达的最远节点的距离。设x的子节点为y1,y2, y3, ..., yt,edge(x, y)表示边权,
显然有 d[x] = max{d[yi] + edge(x, yi)}(1 <= i <= t)
接下来,我们可以考虑对每个节点x求出 经过节点x的最长链的长度 f[x],整棵树的直径就是max{f[x]}(1 <= x <= n)
对于x的任意两个节点yi和yj, 经过节点x的最长链长度 可以通过四个部分构成:
从yi到yi子树中的最远距离,边(x, yi),边(x, yj),从yj到yj子树中的最远距离。设j < i,因此: f[x] = max{d[yi] + d[yj] + edge(x, yi) + edge(x, yj)}(1 <= j < i <= t)
(后面的这段from一本蓝书QAQ我太菜了)但是我们没有必要使用两层循环来枚举i, j。
在计算d[x]时,子节点的循环将要枚举到i时d[x]恰好就保存了从节点x出发走向“以yj(j < i)为根的子树”,能够到达的最远节点的距离,这个距离就是max{d[yi] +edge(x, yi)}(1 <= j < i)。所以我们先用d[x] + d[yi] + edge(x, yi)更新f[x],再用d[yi] + edge(x, yi)更新d[x]即可
设1号节点为根,"N个点N-1条边的无向图"就可以看做“有根树”
设d[x]表示从节点x出发走向以x为根的子树,能够到达的最远节点的距离。设x的子节点为y1,y2, y3, ..., yt,edge(x, y)表示边权,
显然有 d[x] = max{d[yi] + edge(x, yi)}(1 <= i <= t)
接下来,我们可以考虑对每个节点x求出 经过节点x的最长链的长度 f[x],整棵树的直径就是max{f[x]}(1 <= x <= n)
对于x的任意两个节点yi和yj, 经过节点x的最长链长度 可以通过四个部分构成:
从yi到yi子树中的最远距离,边(x, yi),边(x, yj),从yj到yj子树中的最远距离。设j < i,因此: f[x] = max{d[yi] + d[yj] + edge(x, yi) + edge(x, yj)}(1 <= j < i <= t)
(后面的这段from一本蓝书QAQ我太菜了)但是我们没有必要使用两层循环来枚举i, j。
在计算d[x]时,子节点的循环将要枚举到i时d[x]恰好就保存了从节点x出发走向“以yj(j < i)为根的子树”,能够到达的最远节点的距离,这个距离就是max{d[yi] +edge(x, yi)}(1 <= j < i)。所以我们先用d[x] + d[yi] + edge(x, yi)更新f[x],再用d[yi] + edge(x, yi)更新d[x]即可
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
量出圆周长,除以π
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
用皮尺量一下周长 除以派就是直径了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
树干的直径还是树冠的直径啊
话说 树有胸径这个东西
就是在离地1.3米处的直径 围起来当个圆算就好了
话说 树有胸径这个东西
就是在离地1.3米处的直径 围起来当个圆算就好了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询