DFS C++解Leetcode 1376 Time Needed to Inform All Employees 一家公司的每個員工都有一個獨特的ID,從0到n-1。負責人是headID的那位, manager[headID] = -1。manager[i]表示員工i的直接經理,員工i需要花費informTime[i]分鐘來通知他的直接下屬,通知所有員工所需的時間?
[LeetCode程式]https://www.youtube.com/watch?v=--vVXnaKPqI&list=PLYRlUBnWnd5IdDHk2BjqXwesydU17z_xk
====
A company's employee structure, each employee has a unique ID, from 0 to n-1. The head of the company is the one with the headID. manager[i] indicates the direct manager of employee i, manager[headID] = -1. Employee i takes informTime[i] minutes to inform his direct reports, how long does it take to inform all employees about the news?
class Solution {
public:
vector<vector<int>> adj;
// Adjacency list to represent the organizational hierarchy
// Function to initialize the adjacency list
void adj_ini(int n, vector<int>& manager){
adj.resize(n);
// Resize the adjacency list to accommodate 'n' vertices
for(int i = 0; i < n; i++){
int x = manager[i];//manager 'x' is the parent node
if (x != -1) //i!=headID is special
adj[x].push_back(i);
// Add 'i' as a direct report of manager 'x'
}
}
int timeNeed = 0; // Variable to store the maximum time needed to inform all employees
// Depth-First Search (DFS) to calculate the maximum time needed
void dfs(int i, int time, vector<int>& informTime){
timeNeed = max(timeNeed, time); // Update the maximum time needed
for(auto v: adj[i])
dfs(v, time + informTime[i], informTime);
// Recursive call for each direct report of employee 'i'
}
// Function to calculate the total time needed to inform all employees
int numOfMinutes(int n, int headID, vector<int>& manager, vector<int>& informTime){
adj_ini(n, manager); // Initialize the adjacency list
dfs(headID, 0, informTime);
// Perform DFS starting from the headID (tree root)
return timeNeed; // Return the maximum time needed
}
};
沒有留言:
張貼留言