1376. 通知所有員工所需的時間

1376. 通知所有員工所需的時間

公司裏有 n 名員工,每個員工的 ID 都是獨一無二的,編號從 0n - 1。公司的總負責人通過 headID 進行標識。

manager 數組中,每個員工都有一個直屬負責人,其中 manager[i] 是第 i 名員工的直屬負責人。對於總負責人,manager[headID] = -1。題目保證從屬關係可以用樹結構顯示。

公司總負責人想要向公司所有員工通告一條緊急消息。他將會首先通知他的直屬下屬們,然後由這些下屬通知他們的下屬,直到所有的員工都得知這條緊急消息。

i 名員工需要 informTime[i] 分鐘來通知它的所有直屬下屬(也就是說在 informTime[i] 分鐘後,他的所有直屬下屬都可以開始傳播這一消息)。

返回通知所有員工這一緊急消息所需要的 分鐘數

示例 1:

輸入:n = 1, headID = 0, manager = [-1], informTime = [0]
輸出:0
解釋:公司總負責人是該公司的唯一一名員工。

示例 2:

img

輸入:n = 6, headID = 2, manager = [2,2,-1,2,2,2], informTime = [0,0,1,0,0,0]
輸出:1
解釋:id = 2 的員工是公司的總負責人,也是其他所有員工的直屬負責人,他需要 1 分鐘來通知所有員工。
上圖顯示了公司員工的樹結構。

示例 3:

img

輸入:n = 7, headID = 6, manager = [1,2,3,4,5,6,-1], informTime = [0,6,5,4,3,2,1]
輸出:21
解釋:總負責人 id = 6。他將在 1 分鐘內通知 id = 5 的員工。
id = 5 的員工將在 2 分鐘內通知 id = 4 的員工。
id = 4 的員工將在 3 分鐘內通知 id = 3 的員工。
id = 3 的員工將在 4 分鐘內通知 id = 2 的員工。
id = 2 的員工將在 5 分鐘內通知 id = 1 的員工。
id = 1 的員工將在 6 分鐘內通知 id = 0 的員工。
所需時間 = 1 + 2 + 3 + 4 + 5 + 6 = 21 。

示例 4:

輸入:n = 15, headID = 0, manager = [-1,0,0,1,1,2,2,3,3,4,4,5,5,6,6], informTime = [1,1,1,1,1,1,1,0,0,0,0,0,0,0,0]
輸出:3
解釋:第一分鐘總負責人通知員工 1 和 2 。
第二分鐘他們將會通知員工 3, 4, 5 和 6 。
第三分鐘他們將會通知剩下的員工。

示例 5:

輸入:n = 4, headID = 2, manager = [3,3,-1,2], informTime = [0,0,162,914]
輸出:1076

提示:

  • 1 <= n <= 10^5
  • 0 <= headID < n
  • manager.length == n
  • 0 <= manager[i] < n
  • manager[headID] == -1
  • informTime.length == n
  • 0 <= informTime[i] <= 1000
  • 如果員工 i 沒有下屬,informTime[i] == 0
  • 題目 保證 所有員工都可以收到通知。
class Solution {
public:
    int numOfMinutes(int n, int headID, vector<int>& manager, vector<int>& informTime) {
        vector<int>v(n, 0);
        for(int i = 0; i < n; ++i){
            int time = 0, tmp = i;
            while((tmp = manager[tmp]) != -1)
                time += informTime[tmp];
            v[i] = max(v[i], time);
        }
        return *max_element(v.begin(), v.end());
    }
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章