> For the complete documentation index, see [llms.txt](https://jimmylin1991.gitbook.io/practice-of-algorithm-problems/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://jimmylin1991.gitbook.io/practice-of-algorithm-problems/dfs-and-bfs/690.-employee-importance.md).

# 690. Employee Importance

You are given a data structure of employee information, which includes the employee's **unique id**, his **importance value** and his **direct** subordinates' id.

For example, employee 1 is the leader of employee 2, and employee 2 is the leader of employee 3. They have importance value 15, 10 and 5, respectively. Then employee 1 has a data structure like \[1, 15, \[2]], and employee 2 has \[2, 10, \[3]], and employee 3 has \[3, 5, \[]]. Note that although employee 3 is also a subordinate of employee 1, the relationship is **not direct**.

Now given the employee information of a company, and an employee id, you need to return the total importance value of this employee and all his subordinates.

**Example 1:**

```
Input: [[1, 5, [2, 3]], [2, 3, []], [3, 3, []]], 1
Output: 11
Explanation:
Employee 1 has importance value 5, and he has two direct subordinates: employee 2 and employee 3. They both have importance value 3. So the total importance value of employee 1 is 5 + 3 + 3 = 11.
```

**Note:**

1. One employee has at most one **direct** leader and may have several subordinates.
2. The maximum number of employees won't exceed 2000.

```cpp
// Employee info
class Employee {
public:
    // It's the unique ID of each node.
    // unique id of this employee
    int id;
    // the importance value of this employee
    int importance;
    // the id of direct subordinates
    vector<int> subordinates;
};
```

```cpp
// Recursive DFS
void helper(unordered_map<int, Employee*>& mp, int id, int& res) {
    if (!mp.count(id)) return;
    Employee*& emp = mp[id];
    for (int sub_id : emp->subordinates) helper(mp, sub_id, res);
    res += emp->importance;
}
int getImportance(vector<Employee*> employees, int id) {
    unordered_map<int, Employee*> mp; // id -> emp info
    for (Employee*& emp : employees) mp[emp->id] = emp;
    int res = 0;
    helper(mp, id, res);
    return res;
}
```

```cpp
// BFS
int getImportance(vector<Employee*> employees, int id) {
    unordered_map<int, Employee*> mp; // id -> emp info
    for (Employee*& emp : employees) mp[emp->id] = emp;
    queue<int> q({id});
    int res = 0;
    while (!q.empty()) {
        Employee* t = mp[q.front()]; q.pop();
        res += t->importance;
        for (int sub_id : t->subordinates)
            q.push(sub_id);
    }
    return res;
}
```


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://jimmylin1991.gitbook.io/practice-of-algorithm-problems/dfs-and-bfs/690.-employee-importance.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
