当前位置: 首页 > news >正文

[Mdfs] lc690. 员工的重要性(dfs+bfs+离线询问+问题拓展+基础题)

文章目录

    • 1. 题目来源
    • 2. 题目解析

1. 题目来源

链接:690. 员工的重要性

题单:

2. 题目解析

简单题目,直接 dfs 遍历子树每个节点,累加起来对应的值即可。

拓展:

  • 如果有许多查询情况呢?涉及到离线查询。
  • 那么需要找到根节点。
    • 如何找根?用一个 set 去维护一下,如果当前节点没有父节点,则为根节点。
  • dfs 遍历得到每个节点作为根节点时,子树的重要值总和。
    • 这个需要在回溯的时候进行累加,并非向下递归的时候累加,这个需要注意。

当然,bfs 写法也非常直观,不赘述。


  • 时间复杂度 O ( n ) O(n) O(n)
  • 空间复杂度 O ( 1 ) O(1) O(1)

dfs

class Solution {
public:int getImportance(vector<Employee*> employees, int id) {unordered_map<int, Employee*> g;for (auto e : employees) g[e->id] = e;auto dfs = [&](auto&& dfs, int u) -> int {int res = g[u]->importance;for (auto e : g[u]->subordinates) res += dfs(dfs, e);return res;};return dfs(dfs, id);}
};

/*
// Definition for Employee.
class Employee {
public:int id;int importance;vector<int> subordinates;
};
*/class Solution {
public:int getImportance(vector<Employee*> employees, int id) {unordered_map<int, vector<int>> g;unordered_map<int, int> um;for (auto e : employees) {um[e->id] = e->importance;for (auto ne : e->subordinates) g[e->id].push_back(ne);}int res = 0;queue<int> q;q.push(id);while (!q.empty()) {int u = q.front(); q.pop();res += um[u];for (int v : g[u]) q.push(v);}return res;}
};

拓展:

/*
// Definition for Employee.
class Employee {
public:int id;int importance;vector<int> subordinates;
};
*/class Solution {
public:int getImportance(vector<Employee*> employees, int id) {unordered_map<int, vector<int>> g;unordered_map<int, int> um;set<int> S;for (auto e : employees) {S.insert(e->id);um[e->id] = e->importance;for (auto ne : e->subordinates) g[e->id].push_back(ne), S.erase(ne);}auto dfs = [&](auto&& dfs, int u, int fa) -> void {for (auto e : g[u]) {dfs(dfs, e, u);}if (fa > 0) um[fa] += um[u];};dfs(dfs, *S.begin(), -1);return um[id];}
};

http://www.mrgr.cn/news/10852.html

相关文章:

  • 支持pyro 1.8以上的贝叶斯神经网络实现 bnn Bayesian Neural Network pyro ,人工智能
  • ptrade排坑日记——一键脚本报错,启动jupyterhub失败。
  • 【PL/pgSQL】华为数据库GaussDB及PostgreSQL 数据库系统的过程语言
  • Flutter 高德地图坐标和百度坐标相互转换
  • C语言指针原理--单片机C语言编程开发中指针变量的本质/用法/注意事项
  • Prompt + 工作流组件 = AI智能体:开启智能化新时代
  • C#入门(14)Switch语句
  • Java-文件读取工具类FileReaderUtil
  • 【C#】【EXCEL】BumblebeeComponentsAnalysisGH_Ex_Ana_CondUnique.cs
  • 169页PPT丨城投公司战略规划之产业投资商规划
  • 数据结构学习:单链表
  • 四川财谷通,信息科技引领者!
  • Ps:首选项
  • css设置三个div宽度占据三分之一
  • .NET Razor类库 - 静态资源组件化
  • MVVM分层思想
  • PHP农场扶农系统智慧认养智慧乡村系统农场系统小程序源码
  • AI大模型编写多线程并发框架(六十一):从零开始搭建框架
  • pg数据库的三种不同数据持久性解读
  • Buildroot构建Qt根文件系统-思维导图-学习笔记-基于正点原子阿尔法开发板