【C++BFS】690. 員工的重要性

本文涉及知識點

C++BFS算法

LeetCode690. 員工的重要性

你有一個保存員工信息的數據結構,它包含了員工唯一的 id ,重要度和直系下屬的 id 。
給定一個員工數組 employees,其中:
employees[i].id 是第 i 個員工的 ID。
employees[i].importance 是第 i 個員工的重要度。
employees[i].subordinates 是第 i 名員工的直接下屬的 ID 列表。
給定一個整數 id 表示一個員工的 ID,返回這個員工和他所有下屬的重要度的 總和。
示例 1:
在這里插入圖片描述

輸入:employees = [[1,5,[2,3]],[2,3,[]],[3,3,[]]], id = 1
輸出:11
解釋:
員工 1 自身的重要度是 5 ,他有兩個直系下屬 2 和 3 ,而且 2 和 3 的重要度均為 3 。因此員工 1 的總重要度是 5 + 3 + 3 = 11 。

示例 2:

在這里插入圖片描述

輸入:employees = [[1,2,[5]],[5,-3,[]]], id = 5
輸出:-3
解釋:員工 5 的重要度為 -3 并且沒有直接下屬。
因此,員工 5 的總重要度為 -3。

提示:
1 <= employees.length <= 2000
1 <= employees[i].id <= 2000
所有的 employees[i].id 互不相同。
-100 <= employees[i].importance <= 100
一名員工最多有一名直接領導,并可能有多名下屬。
employees[i].subordinates 中的 ID 都有效。

C++BFS

根據生活常識,我們假定沒有任何兩位員工互為領導。如果互為領導,本題無法計算。
我們令 本人是自己的0層下屬,直接下屬是1層下屬,直接下屬的直接下屬是二級下屬…
leves[i]記錄id 的i層下屬。
BFS的狀態表示:cur。
BFS的后續狀態:cur的直接下屬。
BFS的初始狀態:leves[0] = {id};
BFS的返回值,所有的cur重要性之和。
BFS的重復處理:根據生活常識,無需處理重復。
預處理:向量vIDtoPtr記錄 各id對應的員工信息。

代碼

核心代碼

class Employee {public:int id;int importance;vector<int> subordinates;};class Solution {public:int getImportance(vector<Employee*> employees, int id) {vector<Employee*> vIDToPtr(2000 + 1);for ( auto& ptr : employees) {vIDToPtr[ptr->id] = ptr;}queue<int > que;que.emplace(id);int ret = 0;while (que.size()) {int cur = que.front();que.pop();auto ptr = vIDToPtr[cur];ret += ptr->importance;for (const auto& next : ptr->subordinates) {que.emplace(next);}}return ret;}};

單元測試

namespace LeetCode690
{//LeetCode690. 員工的重要性TEST_CLASS(LeetCode690){public:class Employee {public:int id;int importance;vector<int> subordinates;};class Solution {public:int getImportance(vector<Employee*> employees, int id) {vector<Employee*> vIDToPtr(2000 + 1);for ( auto& ptr : employees) {vIDToPtr[ptr->id] = ptr;}queue<int > que;que.emplace(id);int ret = 0;while (que.size()) {int cur = que.front();que.pop();auto ptr = vIDToPtr[cur];ret += ptr->importance;for (const auto& next : ptr->subordinates) {que.emplace(next);}}return ret;}};vector<Employee> employees;vector<Employee*> ToPtr(vector<Employee>& employees) {vector<Employee*> ret;for (auto& e : employees) {ret.emplace_back(&e);}return ret;}int id;TEST_METHOD(TestMethod1){employees = { {1,5,{2,3}},{2,3,{}},{3,3,{}} }, id = 1;auto res = Solution().getImportance(ToPtr(employees), id);AssertEx(11, res);}TEST_METHOD(TestMethod2){employees = { {1,2,{5}},{5,-3,{}} }, id = 5;auto res = Solution().getImportance(ToPtr(employees), id);AssertEx(-3, res);}};
}


如果有不明白的,請加文末QQ群。

擴展閱讀

視頻課程

先學簡單的課程,請移步CSDN學院,聽白銀講師(也就是鄙人)的講解。
https://edu.csdn.net/course/detail/38771

如何你想快速形成戰斗了,為老板分憂,請學習C#入職培訓、C++入職培訓等課程
https://edu.csdn.net/lecturer/6176

相關推薦

我想對大家說的話
《喜缺全書算法冊》以原理、正確性證明、總結為主。
按類別查閱鄙人的算法文章,請點擊《算法與數據匯總》。
有效學習:明確的目標 及時的反饋 拉伸區(難度合適) 專注
聞缺陷則喜(喜缺)是一個美好的愿望,早發現問題,早修改問題,給老板節約錢。
子墨子言之:事無終始,無務多業。也就是我們常說的專業的人做專業的事。
如果程序是一條龍,那算法就是他的是睛

測試環境

操作系統:win7 開發環境: VS2019 C++17
或者 操作系統:win10 開發環境: VS2022 C++17
如無特殊說明,本算法用**C++**實現。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/44122.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/44122.shtml
英文地址,請注明出處:http://en.pswp.cn/web/44122.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

RabbitMQ 高級功能

RabbitMQ 是一個廣泛使用的開源消息代理&#xff0c;它支持多種消息傳遞協議&#xff0c;可以在分布式系統中用于可靠的消息傳遞。除了基本的消息隊列功能外&#xff0c;RabbitMQ 還提供了一些高級功能&#xff0c;增強了其在高可用性、擴展性和靈活性方面的能力。以下是一些主…

軟件架構之嵌入式系統設計(2)

軟件架構之嵌入式系統設計&#xff08;2&#xff09; 12.4 嵌入式網絡系統12.4.1 現場總線網12.4.2 家庭信息網11.4.3 無線數據通信網12.4.4 嵌入式 Internet 12.5 嵌入式數據庫管理系統12.5.1 使用環境的特點12.5.2 系統組成與關鍵技術 12.6 實時系統與嵌入式操作系統12.6.1 嵌…

MyBatis(38)MyBatis 如何與 Spring Boot 集成,有哪些實踐技巧

集成MyBatis與Spring Boot可以極大地提升開發效率&#xff0c;簡化配置&#xff0c;并利用Spring Boot的自動配置特性優化項目結構和性能。下面我們將詳細探討如何實現這一集成&#xff0c;并分享一些實踐技巧。 1. 添加依賴 首先&#xff0c;在pom.xml中添加MyBatis和Spring…

AI學習指南機器學習篇-聚類樹的剪枝

AI學習指南機器學習篇-聚類樹的剪枝 在機器學習領域&#xff0c;聚類是一種常用的無監督學習方法&#xff0c;通過對數據進行分組來發現數據中的結構和模式。聚類樹是一種常用的聚類算法之一&#xff0c;它通過構建一個樹狀結構來展示聚類的層次關系&#xff0c;并能夠幫助我們…

Linux 忘記root密碼,通過單用戶模式修改

銀河麒麟桌面操作系統 V10&#xff08;sp1&#xff09;”忘記用戶密碼&#xff0c;需要修改用戶密碼所寫&#xff0c;可用于 X86 架構和 arm 架構。 2. 選擇第一項&#xff0c;在上圖界面按“e”鍵進行編輯修改。 3. 在以 linux 開頭這行的行末&#xff0c;添加“init/bin/bas…

Rockchip Android平臺編譯生成userdata.img

Rockchip Android平臺編譯生成userdata.img 適用版本 本修改方法適用于Android12及以上版本 代碼修改 device/rockchip/rk3576&#xff1a; --- a/rk3576_u/BoardConfig.mkb/rk3576_u/BoardConfig.mk-28,4 28,7 PRODUCT_KERNEL_CONFIG pcie_wifi.configBOARD_GSENSOR_MXC…

SSE(Server-Send-Event)服務端推送數據技術

SSE&#xff08;Server-Send-Event&#xff09;服務端推送數據技術 大家是否遇到過服務端需要主動傳輸數據到客戶端的情況&#xff0c;目前有三種解決方案。 客戶端輪詢更新數據。服務端與客戶端建立 Socket 連接雙向通信服務端與客戶建立 SSE 連接單向通信 幾種方案的比較&…

【前端】fis框架學習

文章目錄 1. 介紹 1. 介紹 FIS是專為解決前端開發中自動化工具、性能優化、模塊化框架、開發規范、代碼部署、開發流程等問題的工具框架。 使用FIS我們可以快速的完成各種前端項目的資源壓縮、合并等等各種性能優化工作&#xff0c;同時FIS還提供了大量的開發輔助功能 首先我們…

Nginx上配置多個網站

一、需求描述 我們只有一臺安裝了Nginx的服務器,但是我們需要實現在這臺服務器上部署多個網站,用以對外提供服務。 二、Nginx上配置多個網站分析 一般網站的格式為:【http://ip地址:端口號/URI】(比如:http://192.168.3.201:80),IP地址也可用域名表示;那么要實現在Nginx…

QT實現WebSocket通信

文章目錄 WebSocket服務端WebSocket客戶端html websocket客戶端在Qt5中實現WebSocket通信可以通過使用QtWebSockets模塊來實現。這個模塊提供了一個WebSocket客戶端和服務器的實現,可以很方便地在你的應用程序中集成WebSocket功能。 使用的時候,首先在pro工程文件中添加對應的…

【Vue】vue-element-admin概述

一、項目簡介 定位&#xff1a;vue-element-admin是一個后臺集成解決方案&#xff0c;旨在提供一種快速開發企業級后臺應用的方案&#xff0c;讓開發者能更專注于業務邏輯和功能實現&#xff0c;而非基礎架構的搭建。技術棧&#xff1a;該項目基于Vue.js、Element UI、Vue Rou…

Redis 7.x 系列【24】哨兵模式配置項

有道無術&#xff0c;術尚可求&#xff0c;有術無道&#xff0c;止于術。 本系列Redis 版本 7.2.5 源碼地址&#xff1a;https://gitee.com/pearl-organization/study-redis-demo 文章目錄 1. 前言2. 配置項2.1 protected-mode2.2 port2.3 daemonize2.4 pidfile2.5 loglevel2.…

i18n、L10n、G11N 和 T9N 的含義

注&#xff1a;機翻&#xff0c;未校對。 Looking into localization for the first time can be terrifying, if only due to all of the abbreviations. But the meaning of i18n, L10n, G11N, and T9N, are all very easy to understand. 第一次研究本地化可能會很可怕&…

深入探索Python Web抓取世界:利用BeautifulSoup與Pandas構建全面的網頁數據采集與分析流程

引言 在信息爆炸的時代&#xff0c;網絡成為了一個無盡的知識寶庫&#xff0c;其中包含了大量有價值的公開數據。Python作為一種靈活多變且具有強大生態系統支持的編程語言&#xff0c;尤其擅長于數據的收集、處理與分析工作。本文將聚焦于Python的兩大利器——BeautifulSoup和…

如何做一個遲鈍不受傷的打工人?

一、背景 在當前激烈的職場環境中&#xff0c;想要成為一個相對“遲鈍”且不易受傷的打工人&#xff0c;以下是一些建議&#xff0c;但請注意&#xff0c;這里的“遲鈍”并非指智力上的遲鈍&#xff0c;而是指在應對復雜人際關系和壓力時展現出的豁達與鈍感力&#xff1a; 尊重…

【測開能力提升-fastapi框架】fastapi路由分發

1.7 路由分發 apps/app01.py from fastapi import APIRouterapp01 APIRouter()app01.get("/food") async def shop_food():return {"shop": "food"}app01.get("/bed") async def shop_food():return {"shop": "bed&…

部署stable-diffusion時遇到RuntimeError: Couldn‘t clone Stable Diffusion XL.問題

錯誤信息如下&#xff1a; venv "E:\AI\stable-diffusion-webui-master\venv\Scripts\Python.exe" fatal: ambiguous argument HEAD: unknown revision or path not in the working tree. Use -- to separate paths from revisions, like this: git <command>…

js前端隱藏列 并且獲取值,列表復選框

列表框 <div class"block" id"psi_wh_allocation_m"><table id"result" class"list auto hover fixed" style"width:100%;border-collapse:collapse"><thead><tr><%--<th></th>--%&…

LabVIEW濾波器性能研究

為了研究濾波器的濾波性能&#xff0c;采用LabVIEW設計了一套濾波器性能研究系統。該系統通過LabVIEW中的波形生成函數&#xff0c;輸出幅值及頻率可調的正弦波和白噪聲兩種信號&#xff0c;并將白噪聲與正弦波疊加&#xff0c;再通過濾波器輸出純凈的正弦波信號。系統通過FFT&…

Python從0到100(三十八):json字符串的數據提取

JSON的數據提取 1.學習目標 掌握JSON相關的方法&#xff08;load, loads, dump, dumps&#xff09;了解JSONPath的使用&#xff08;提取JSON中的數據&#xff09; 2 復習什么是JSON JSON(JavaScript Object Notation) 是一種輕量級的數據交換格式&#xff0c;它使得人們很容…