3067. 在帶權樹網絡中統計可連接服務器對數目 Medium

給你一棵無根帶權樹,樹中總共有?n?個節點,分別表示?n?個服務器,服務器從?0?到?n - 1?編號。同時給你一個數組?edges?,其中?edges[i] = [ai, bi, weighti]?表示節點?ai?和?bi?之間有一條雙向邊,邊的權值為?weighti?。再給你一個整數?signalSpeed?。

如果兩個服務器?a?,b?和?c?滿足以下條件,那么我們稱服務器?a?和?b?是通過服務器?c?可連接的?:

?·a < b?,a != c?且?b != c?。

從?c?到?a?的距離是可以被?signalSpeed?整除的。

從?c?到?b?的距離是可以被?signalSpeed?整除的。

從?c?到?b?的路徑與從?c?到?a?的路徑沒有任何公共邊。

請你返回一個長度為?n?的整數數組?count?,其中?count[i]?表示通過服務器?i?可連接?的服務器對的?數目?。

示例 1:

輸入:edges = [[0,1,1],[1,2,5],[2,3,13],[3,4,9],[4,5,2]], signalSpeed = 1
輸出:[0,4,6,6,4,0]
解釋:由于 signalSpeed 等于 1 ,count[c] 等于所有從 c 開始且沒有公共邊的路徑對數目。
在輸入圖中,count[c] 等于服務器 c 左邊服務器數目乘以右邊服務器數目。

示例 2:

輸入:edges = [[0,6,3],[6,5,3],[0,3,1],[3,2,7],[3,1,6],[3,4,2]], signalSpeed = 3
輸出:[2,0,0,0,0,0,2]
解釋:通過服務器 0 ,有 2 個可連接服務器對(4, 5) 和 (4, 6) 。
通過服務器 6 ,有 2 個可連接服務器對 (4, 5) 和 (0, 5) 。
所有服務器對都必須通過服務器 0 或 6 才可連接,所以其他服務器對應的可連接服務器對數目都為 0 。

提示:

?·2 <= n <= 1000

?·edges.length == n - 1

?·edges[i].length == 3

?·0 <= ai, bi < n

?·edges[i] = [ai, bi, weighti]

?·1 <= weighti <= 106

?·1 <= signalSpeed <= 106

輸入保證?edges?構成一棵合法的樹。

題目大意:計算每個結點可連接的服務器對數。

分析:

(1)將某個結點看作根,只有該結點有多個子樹時,該結點才有可連接的服務器對,否則由于其余服務器到該結點有公共邊,該結點可連接的服務器對數為0;

(2)基于(1)中結論,某個結點可連接的服務器對數ans[i]計算方式如下(將與該結點的距離是signalSpeeed倍數的結點稱之為符合要求的結點):用深度優先遍歷算法計算每個子樹符合要求的結點個數,ans[i]即為這些子樹中符合要求的結點進行交叉配對最多可以配對的服務器對數;

(3)根據(2)中算法可以得到1個結點可連接的對數,采取相同做法對每個結點進行深度優先遍歷就能計算得到每個結點可連接的服務器對數;

(4)本題結點較多,采用鄰接矩陣存儲時間復雜度較高,為O(N3),會超時,但所給數據結構是樹,只有n-1條邊,考慮到邊較少,因此采用鄰接表存儲,將時間復雜度降為O(N2)。

class Solution {
public:vector<int> countPairsOfConnectableServers(vector<vector<int>>& edges, int signalSpeed) {int N=edges.size()+1,sumNode,sum;vector<vector<pair<int,int>>> dis(N);vector<int> ans(N,0);function<int(int,int,int)> dfs=[&](int root,int parent,int length){int num=0;if(!length) ++num;for(auto& [node,len]:dis[root]){if(node!=parent) num+=dfs(node,root,(length+len)%signalSpeed);}return num;};for(auto& ele:edges){dis[ele[0]].emplace_back(ele[1],ele[2]);dis[ele[1]].emplace_back(ele[0],ele[2]);}for(int i=0;i<N;++i){sum=0;for(auto& [root,len]:dis[i]){sumNode=dfs(root,i,len%signalSpeed);ans[i]+=sumNode*sum;sum+=sumNode;}}return ans;}
};
//鄰接矩陣存儲,超時的算法
// class Solution {
// public:
//     vector<int> countPairsOfConnectableServers(vector<vector<int>>& edges, int signalSpeed) {
//         int N=edges.size()+1,sumNode,sum;
//         vector<vector<int>> dis(N,vector<int>(N,0));
//         vector<int> ans(N,0);
//         function<int(int,int,int)> dfs=[&](int node,int parent,int length){
//             int num=0;
//             length+=dis[parent][node];
//             if(!(length%signalSpeed)) ++num;
//             for(int i=0;i<dis.size();++i){
//                 if(dis[node][i]>0&&i!=parent) num+=dfs(i,node,length);
//             }
//             return num;
//         };
//         for(int i=0;i<N-1;++i) dis[edges[i][0]][edges[i][1]]=dis[edges[i][1]][edges[i][0]]=edges[i][2];
//         for(int i=0;i<N;++i){
//             sum=0;
//             for(int j=0;j<N;++j){
//                 if(dis[i][j]>0){
//                     sumNode=dfs(j,i,0);
//                     ans[i]+=sumNode*sum;
//                     sum+=sumNode;
//                 }
//             }
//         }
//         return ans;
//     }
// };

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

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

相關文章

Yolo-v5模型訓練速度,與GeForce的AI算力描述

1.GeForce RTX3070 Ti官網參數&#xff1a; GeForce RTXTM 3070 Ti 和 RTX 3070 顯卡采用第 2 代 NVIDIA RTX 架構 - NVIDIA Ampere 架構。該系列產品搭載專用的第 2 代 RT Core &#xff0c;第 3 代 Tensor Core、全新的 SM 多單元流處理器以及高速顯存&#xff0c;助您在高性…

【網絡安全的神秘世界】MySQL

&#x1f31d;博客主頁&#xff1a;泥菩薩 &#x1f496;專欄&#xff1a;Linux探索之旅 | 網絡安全的神秘世界 | 專接本 MySQL MySQL 教程 | 菜鳥教程 (runoob.com) 什么是數據庫 數據庫&#xff08;Database&#xff09;是按照數據結構來組織、存儲和管理數據的倉庫 在do…

二手筆記本怎么買

用途&#xff1a; 1.給爹媽用來簡單辦公&#xff0c;只是用office基礎辦公軟件&#xff0c;無出差無游戲無畫圖需求。 預算&#xff1a; 1000以內 以下是電腦對比選項&#xff1a; 屏幕大小-> 目前市面上的尺寸對比&#xff0c;以A4紙說明&#xff0c;13.3寸14.1寸15.6…

Camunda 7.x 系列【66】實戰篇之我發起的

有道無術,術尚可求,有術無道,止于術。 本系列Spring Boot 版本 2.7.9 本系列Camunda 版本 7.19.0 源碼地址:https://gitee.com/pearl-organization/camunda-study-demo 前后端基于若依:https://gitee.com/y_project/RuoYi-Vue 流程設計器基于RuoYi-flowable:https://gi…

參數高效微調PEFT(四)快速入門(IA)3

參數高效微調PEFT(四)快速入門(IA)3 我們已經了解了HuggingFace中peft庫的幾種高效微調方法。 參數高效微調PEFT(一)快速入門BitFit、Prompt Tuning、Prefix Tuning 參數高效微調PEFT(二)快速入門P-Tuning、P-Tuning V2 參數高效微調PEFT(三)快速入門LoRA、AdaLoRA 今天我…

探索 Omost:創新的圖像生成AI框架

文章目錄 探索 Omost&#xff1a;創新的圖像生成AI框架第一部分&#xff1a;背景第二部分&#xff1a;Omost是什么&#xff1f;第三部分&#xff1a;如何安裝Omost&#xff1f;第四部分&#xff1a;結合具體場景使用第五部分&#xff1a;總結 探索 Omost&#xff1a;創新的圖像…

OceanBase 4.3 特性解析:列存技術

在涉及大規模數據的復雜分析或即時查詢時&#xff0c;列式存儲是支撐業務負載的關鍵技術之一。相較于傳統的行式存儲&#xff0c;列式存儲采用了不同的數據文件組織方式&#xff0c;它將表中的數據以列為單位進行物理排列。這種存儲模式允許在分析過程中&#xff0c;查詢計算僅…

flowable工作流 完成任務代碼 及擴展節點審核人(實現多級部門主管 審核等)詳解【JAVA+springboot】

低代碼項目 使用flowable 工作流 完成任務代碼 詳解 可以看到 complete()方法 傳遞了流程變量參數var 前端傳遞此參數就可以實現 流程中 審批 更新流程變量參數var 也可以進行更多擴展 實現流程中更新表單內容功能 啟動流程實例代碼 實現對于流程自定義 動態節點審核人 功…

中央空調節能的分戶計費系統

中央空調節能 在建筑能耗中&#xff0c;中央空調能耗一般占到了40%---60%的比例&#xff0c;因此如何有效降低空調能耗就成為建筑節能的重中之重。 項目案例描述 山東銀座購物廣場&#xff1a;為集購物中心、高級酒店式公寓和辦公為一體的綜合性公共建筑。整體建筑共為地下3層&…

副業變現:Midjourney繪畫賺錢的6種方式

今年被稱為AI元年&#xff0c;其中最火的兩款AI工具非ChatGpt和Midjourney莫屬。究其原因&#xff0c;無非兩點&#xff1a;第一&#xff0c;它提高了生產力&#xff0c;之前需要兩年完成的工作&#xff0c;使用ChatGpt兩天就完成。 第二&#xff0c;它帶來了副業收入&#x…

JavaScript異步編程簡單介紹

JavaScript異步編程是一種編程模式&#xff0c;用于處理需要等待某些操作完成之后才能繼續執行的代碼。這些操作可以是網絡請求、文件讀取、定時器等等。 異步編程的目標是避免阻塞代碼執行&#xff0c;在等待操作完成的同時&#xff0c;允許其他代碼繼續執行。 以下是一個使…

Springboot-RabbitMQ 消息隊列使用

一、概念介紹&#xff1a; RabbitMQ中幾個重要的概念介紹&#xff1a; Channels&#xff1a;信道&#xff0c;多路復用連接中的一條獨立的雙向數據流通道。信道是建立在真實的 TCP 連接內地虛擬連接&#xff0c;AMQP 命令都是通過信道發出去的&#xff0c;不管是發布消息、訂閱…

2021 hnust 湖科大 數字系統設計與VHDL課程 大作業 - 出租車計價器設計

2021 hnust 湖科大 數字系統設計與VHDL課程大作業-出租車計價器設計 描述 大二上的eda考查課的實驗&#xff0c;額外實現了停車等待2分鐘后收費1元/min。內含項目文件&#xff08;實測可運行&#xff09;&#xff0c;代碼&#xff0c;報告&#xff0c;視頻和照片&#xff0c;…

JavaScript函數定義,函數參數,函數調用

JavaScript函數定義&#xff1a; 在JavaScript中&#xff0c;我們可以使用關鍵字function來定義一個函數。函數定義的一般語法如下&#xff1a; function functionName(parameter1, parameter2, ...){// 函數體 }其中&#xff0c;functionName是函數的名稱&#xff0c;可以自定…

功能強大且專業的PDF轉換軟件PDF Shaper Professional 14.2

PDF Shaper Professional是一款適用于Windows的程序&#xff0c;可讓您在計算機上處理PDF文件。 要開始使用PDF Shaper Professional&#xff0c;您需要在Windows計算機上下載并安裝該程序。您還應該有合適的驅動程序和編解碼器來處理計算機上的文本和圖形。 安裝程序后&#…

分享一份糟糕透頂的簡歷,看看跟你寫的一樣不

最近看了一個人的簡歷&#xff0c;怎么說呢&#xff0c;前幾年這么寫沒問題&#xff0c;投出去就有回復&#xff0c;但從現在開始&#xff0c;這么寫肯定不行了。下面我給大家分享一下內容&#xff1a; 目錄 &#x1f926;?♀?這是簡歷文檔截圖 &#x1f937;?♀?這是基本…

淘寶評論API調用指南,讓你購物不再困擾

一、淘寶評論API概述 淘寶評論API是淘寶開放平臺提供的一種服務&#xff0c;它允許開發者通過調用API接口獲取淘寶商品評論數據&#xff0c;聯訊數據從而為用戶提供更加豐富和實用的購物決策信息。通過使用淘寶評論API&#xff0c;開發者可以輕松地實現以下功能&#xff1a; …

SwiftUI 利用 Swizz 黑魔法為系統創建的默認對象插入新協議方法(二)

功能需求 在 SwiftUI 的開發中,我們往往需要借助底層 UIKit 的“上帝之手”來進一步實現額外的定制功能。比如,在可拖放(Dragable)SwiftUI 的實現中,會缺失拖放取消的回調方法讓我們這些禿頭碼農們“欲哭無淚” 如上圖所示,我們在拖放取消時將界面中的一切改變都恢復如初…

slf4j等多個jar包沖突綁定的排查方法使用IDEA的maven help解決

1.安裝 2.使用maven help解決&#xff0c;找到對應包存在的沖突 使用exclude直接解決即可

【人工智能】第四部分:ChatGPT的技術實現

人不走空 &#x1f308;個人主頁&#xff1a;人不走空 &#x1f496;系列專欄&#xff1a;算法專題 ?詩詞歌賦&#xff1a;斯是陋室&#xff0c;惟吾德馨 目錄 &#x1f308;個人主頁&#xff1a;人不走空 &#x1f496;系列專欄&#xff1a;算法專題 ?詩詞歌…