-
Notifications
You must be signed in to change notification settings - Fork 0
/
LC -(M)- Time Needed to Inform All Employees.cpp
84 lines (60 loc) · 2.62 KB
/
LC -(M)- Time Needed to Inform All Employees.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
// A company has n employees with a unique ID for each employee from 0 to n - 1. The head of the company is the one with headID.
// Each employee has one direct manager given in the manager array where manager[i] is the direct manager of the i-th employee, manager[headID] = -1.
// Also, it is guaranteed that the subordination relationships have a tree structure.
// The head of the company wants to inform all the company employees of an urgent piece of news. He will inform his direct subordinates,
// and they will inform their subordinates, and so on until all employees know about the urgent news.
// The i-th employee needs informTime[i] minutes to inform all of his direct subordinates (i.e.,
// After informTime[i] minutes, all his direct subordinates can start spreading the news).
// Return the number of minutes needed to inform all the employees about the urgent news.
// Input: n = 6, headID = 2, manager = [2,2,-1,2,2,2], informTime = [0,0,1,0,0,0]
// Output: 1
// Explanation: The head of the company with id = 2 is the direct manager of all the employees in the company and needs 1 minute to inform them all.
// The tree structure of the employees in the company is shown.
class Solution {
public:
int numOfMinutes(int n, int headID, vector<int>& manager, vector<int>& informTime) {
vector<int> timetaken(n, 0);
vector<int> adj[n];
for(int i=0; i<n;++i){
if(manager[i]==-1) continue;
adj[manager[i]].push_back(i);
}
queue<int> q;
q.push(headID);
timetaken[headID]=informTime[headID];
int maxi=0;
while(!q.empty()){
int node = q.front();
q.pop();
for(auto it: adj[node]){
timetaken[it]=timetaken[node]+informTime[it];
maxi = max(maxi, timetaken[it]);
q.push(it);
}
}
return maxi;
}
};
// class Solution {
// public:
// int dfs(int n,vector<pair<int,int>>adj[],vector<bool>&vis,vector<int>& informTime)
// {
// int ans=0;
// for(auto i:adj[n])
// {
// ans=max(ans,informTime[n]+dfs(i.first,adj,vis,informTime));
// }
// return ans;
// }
// int numOfMinutes(int n, int headID, vector<int>& manager, vector<int>& informTime) {
// vector<pair<int,int>>adj[n];
// for(int i=0;i<n;i++)
// {
// if(manager[i]!=-1)
// adj[manager[i]].push_back({i,informTime[i]});
// }
// vector<bool>vis(n,0);
// int ans=dfs(headID,adj,vis,informTime);
// return ans;
// }
// };