树上问题

树的直径

树上任意两节点之间最长的简单路径即为树的「直径」
当以某个节点为根时,从这个节点出发,会得到最长路径d1和次长路径d2,则以该节点为根的最长路径为d1 + d2

// 已知树边关系 : vector<vector<int>> graph(n)
int maxLen = 0;
function<int(int)> dfs = [&](int root) {
    int maxRootLen = 0;
    for (auto next : graph[root]) {
        int len = dfs(next) + 1;
        // 以当前节点为根节点的最长路径
        maxLen = max(maxLen, maxRootLen + len);
        // 以当前节点出发的最长路径
        maxRootLen = max(maxRootLen, len); 
    }
    return maxRootLen;
};
dfs(0);
posted @ 2022-07-12 15:32  miyanyan  阅读(25)  评论(0编辑  收藏  举报