【题解】dia和尊严

dia和威严

https://ac.nowcoder.com/acm/problem/26230

根据题目给出的条件,

一个人可以有多个下属,但一个人最多只能有一个上级。

可以得出其实是一棵树。我们要求的其实就是从根节点到每一个节点的代价,这个代价是根节点到这个节点的边权加上这个节点的点权。
所以只需要进行一次dfs,dfs的过程中记录边权,然后计算每个点的代价的时候加上这个点的点权就可以了。

#include<iostream>
#include<vector>
using namespace std;

const int MAXN = 2e5+10;
int a[MAXN];
vector<pair<int,int> > G[MAXN];
int ans;
void dfs(int now,int sum)
{
    ans = max(ans,a[now]+sum);
    for(int i = 0 ; i < G[now].size() ; i ++)
    {
        dfs(G[now][i].first,sum+G[now][i].second);
    }
}
int main()
{
    int n;
    cin >> n;
    for(int i = 2 ; i <= n ; i++){cin >>a[i];}
    for(int i = 1 ; i < n ; i++)
    {
        int x,y,k;
        cin >> x>>y>>k;
        G[x].push_back(make_pair(y,k));
    }
    dfs(1,0);
    cout<<ans<<endl;
    return 0;
}
全部评论

相关推荐

脑袋锈住了:你这算啥,哥们中科院中强所硕士,本科211,叫我去干分拣,时薪20
点赞 评论 收藏
分享
评论
5
收藏
分享

创作者周榜

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