• POJ


    POJ - 1985 Cow Marathon 【模板】 树的直径 树形DP 邻接表实现

    树的直径

    图中所有最短路径的最大值即为「直径」,可以用两次 DFS 或者树形 DP 的方法在 O(n) 时间求出树的直径。

    做法2 树形DP

    我们记录每个节点向下,所能延申的最远距离(d_1) 和次远距离(d_2) ,那么直径就是所有$d_1 + d_2 $ 的最大值

    POJ - 1985

    给一颗带权树,询问该树的直径,注意这里dp数组可以滚动。

    struct Edge {
        int to;
        ll val;
        Edge(int _to, ll _val) {
            to = _to;
            val = _val;
        }
    };
    
    vector<Edge> e[maxn];
    ll d;
    
    
    ll dfs(int u = 1,int p = -1) {
        ll d1 = 0, d2= 0;
        for (auto v : e[u]) {
            if (v.to == p) continue;
            ll d = dfs(v.to, u) + v.val;
            if (d > d1) d2 = d1, d1 = d;
            else if (d > d2) d2 = d;
        }
        d = max(d, d1 + d2);
        return d1;
    }
    
    
    int main() {
        int n = readint();
        int m = readint();
        char s[5];
        for (int i = 0; i < m; i++) {
            int x = readint();
            int y = readint();
            ll z = readll();
            scanf("%s", s);
            e[x].push_back(Edge(y,z));
            e[y].push_back(Edge(x,z));
        }
        dfs();
        Put(d);
    }
    
  • 相关阅读:
    sqli-labs(二)
    sqli-labs(一)
    路径遍历:ZIP条目覆盖
    JWT
    ActiveMQ漏洞利用方法总结
    Tomcat任意文件上传漏洞CVE-2017-12615
    jsp的文件包含漏洞
    记一次渗透实验(四)
    unity独立游戏开发日志2018/09/22
    python网络编程的坑(持续更新)
  • 原文地址:https://www.cnblogs.com/hznumqf/p/13538459.html
Copyright © 2020-2023  润新知