顺丰笔试8.31 第二题 圣诞树 AC

看到有人问第二道题,好像是树形DP?
我的代码也AC了,可以参考一下
#include<iostream>
#include<vector>

using namespace std;

vector<vector<long long>> children;
vector<long long> value;

void dfs(int u,long long &pos,long long &neg){
    for(int v:children[u]){
        long long tp=0,tn=0;
        dfs(v,tp,tn);
        pos = max(pos,tp);
        neg = max(neg,tn);
    }
    long long val = value[u]+pos-neg;
    if(val>0){
        neg+=val;
    }
    else{
        pos-=val;
    }
    pos=pos;
    neg=neg;
}

int main(){
    int n;
    cin>>n;
    children.resize(n+1);
    value.resize(n+1);
    for(int i=2;i<=n;++i){
        int p;
        cin>>p;
        children[p].push_back(i);
    }
    for(int i=1;i<=n;++i){
        cin>>value[i];
    }
    long long pos=0,neg=0;
    dfs(1,pos,neg);
    cout<<pos+neg<<endl;
    return 0;
}


#顺丰笔试#
全部评论
楼主你好,最近也在练c++算法题,请问如果题目里涉及到树这种形态的,stl库没有标准的树结构,是否通常都是考虑dfs求解呢?
点赞 回复 分享
发布于 2022-09-03 20:26 安徽

相关推荐

10-15 10:57
已编辑
武昌理工学院 FPGA工程师
狠赚笔第一人:老哥学院本没实习还想拿13k学Java狠赚笔呢
点赞 评论 收藏
分享
牛客771574427号:恭喜你,华杰
点赞 评论 收藏
分享
头像 会员标识
11-27 17:08
已编辑
牛客_产品运营部_私域运营
腾讯 普通offer 24k~26k * 15,年包在36w~39w左右。
点赞 评论 收藏
分享
评论
7
10
分享
牛客网
牛客企业服务