首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >LintCode 1862. 给树浇水的时间(图的遍历)

LintCode 1862. 给树浇水的时间(图的遍历)

作者头像
Michael阿明
发布2020-07-13 15:49:47
发布2020-07-13 15:49:47
5800
举报

1. 题目

有一棵n个节点的树,节点编号是0至 n−1,其中 0号节点是根节点,i号节点的父亲节点是father[i] 。

现在要对树浇水,把水撒到根节点上,水会顺着每一条边流下去,从 i 号节点的父亲流到 i 号节点需要 time[i] 的时间,请问需要多久水才能流到所有节点上。

代码语言:javascript
复制
样例
输入:
[-1,0,0]
[-1,3,5]
输出: 5
解释
这棵树如下所示:
   0
 3/\5
1    2
从0到1需要花费3个单位时间,从0到2需要花费5个单位时间,
因此花费5个单位时间可以让水流到所有节点上。

说明
如果 father[i] = i,那么以 i 为根的子树不考虑计算。

注意事项 2≤n≤1052 \leq n \leq 10^52≤n≤105 0≤father[i]<n,father[0]=−10 \leq father[i] < n,father[0] = -10≤father[i]<n,father[0]=−1 1≤times[i]≤1 000,time[0]=−11 \leq times[i] \leq 1\,000, time[0] = -11≤times[i]≤1000,time[0]=−1

2. 解题

代码语言:javascript
复制
class Solution {
public:
    int timeToFlowerTree(vector<int> &father, vector<int> &time) {
        int n = father.size(), id, t, maxt =0 ,i;
        vector<vector<int>> map(n);//图的邻接表
        for(i = 1; i < n; ++i)
            map[father[i]].push_back(i);//from , to
        queue<pair<int,int>> q;// id, time
        q.push({0,0});
        while(!q.empty())
        {   
            id = q.front().first;
            t = q.front().second;
            maxt = max(maxt, t);
            q.pop();
            for(i = 0; i < map[id].size(); ++i)
            {	//遍历邻接表
                q.push(make_pair(map[id][i], t+time[map[id][i]]));
            }  
        }
        return maxt;
    }
};

1006 ms

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/03/21 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 题目
  • 2. 解题
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档