树形dp经典问题

树的重心:
    假设有unordered_map<int,vector<int>> m 表示与结点关联的结点
    void dfs(int v,int fa){
        son[v] = 0;
        int d = G[v].size();
        int prebalance = 0;
        for(int i=0;i<d;i++){
            int k = G[v][i];
            if(k==fa) continue;
            son[v] += son[u]+1;
            prebalance = max(prebalance,son[u]+1);
        }
        prebalance = max(prebalance,n-son[v]-1);
        if(prebalance<balance || balance == prebalance && v<ans){
            balance = prebalance;
            ans = v;
        }
    }

树的最长路径:
    int lastorder(int pre,int cur){
        int first = 0, second = 0;
        for(int i = 0;i<G[cur].size();i++){
            if(G[cur][i]==pre) continue;
            int temp = lastorder(cur,G[cur][i]);
            if(temp>first){
                second = first;
                first = temp;
            }else if(temp>second){
                second = temp;
            }
        }
        maxdistance = max(maxdistance,first+second);
        return first+1;
    }

全部评论

相关推荐

合适才能收到offe...:项目岗是什么岗?我看你有段好像跟策划运营相关,如果找运营的话第三段经历写详细点儿。 个人建议是把自我评价删了换成专业技能放在工作经验上或者下面。学生会那个也可以删,把第一个包装成店铺运营,写4-6给点。第三个也是写4-6个点。注意工作内容➕部分数据。 投递的时候BOS招呼用语改一下,换成我有xx工作经验,熟练掌握xx技能样式,也可以简历截图然后直接发送。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务