leetcode 3559. Number of Ways to Assign Edge Weights II

  • leetcode 3559. Number of Ways to Assign Edge Weights II
    • 1. 解題思路
    • 2. 代碼實現
  • 題目鏈接:3559. Number of Ways to Assign Edge Weights II

1. 解題思路

這一題是題目3558. Number of Ways to Assign Edge Weights I的進階版本。

對于題目3558來說,其核心就是找出樹的最大深度,然后就是一個數學題了,要使得這一條路徑上的邊的總和為奇數,那么其可選的方式為:
N = ∑ i = 1 i ≤ n , i = 1 , 3 , 5 , ? C n i = 2 n ? 1 N = \sum\limits_{i=1}^{i \leq n, i=1,3,5,\cdots} C_{n}^{i} = 2^{n-1} N=i=1in,i=1,3,5,??Cni?=2n?1

因此,我們可以直接計算出其結果。

而對于本題,問題增加的難度在于需要快速地任意給到的兩個點 u , v u,v u,v,找出這兩點間的連接線段的長度,而這個的話事實上和題目3553. Minimum Weighted Subgraph With the Required Paths II非常相近,事實上我們只需要分別求出這兩個點 u , v u,v u,v的深度以及他們的最小公共父節點 p p p的深度,那么 u , v u,v u,v間的距離 d d d就可以快速通過下述公式計算得到:
d = h u + h v ? 2 × h p d = h_u + h_v - 2\times h_p d=hu?+hv??2×hp?

剩下的就是如何求出 u , v u,v u,v的最小公共父節點了,而這個事實上就是一個經典算法了,這里就不具體展開了,后續有時間的話可能會系統整理一下這個算法然后發一篇博客作為備忘好了。

2. 代碼實現

給出python代碼實現如下:

MOD = 10**9+7class LCA:def __init__(self, root, tree):self.max_level = 20  # 根據樹的高度調整self.parent = defaultdict(lambda: [-1]*self.max_level)self.depth = {}self.preprocess(root, tree)def preprocess(self, root, tree):stack = [(root, -1, 0)]  # (node, parent, depth)while stack:node, par, d = stack.pop()self.depth[node] = dself.parent[node][0] = parfor k in range(1, self.max_level):if self.parent[node][k-1] != -1:self.parent[node][k] = self.parent[self.parent[node][k-1]][k-1]for child in tree[node]:if child != par:stack.append((child, node, d+1))def query(self, u, v):if self.depth[u] < self.depth[v]:u, v = v, u# 對齊深度for k in range(self.max_level-1, -1, -1):if self.depth[u] - (1 << k) >= self.depth[v]:u = self.parent[u][k]if u == v:return u# 同步跳轉for k in range(self.max_level-1, -1, -1):if self.parent[u][k] != -1 and self.parent[u][k] != self.parent[v][k]:u = self.parent[u][k]v = self.parent[v][k]return self.parent[u][0]class Solution:def assignEdgeWeights(self, edges: List[List[int]], queries: List[List[int]]) -> List[int]:graph = defaultdict(list)for u, v in edges:graph[u].append(v)graph[v].append(u)depth = defaultdict(int)tree = defaultdict(list)def dfs(u, p):nonlocal depth, treeif u == 1:depth[u] = 0else:depth[u] = depth[p] + 1for v in graph[u]:if v == p:continuetree[u].append(v)dfs(v, u)returndfs(1, 0)lca = LCA(1, tree)def query(u, v):p = lca.query(u, v)d = depth[u] + depth[v] - 2*depth[p]return pow(2, d-1, MOD) if d > 0 else 0return [query(u, v) for u, v in queries]

提交代碼評測得到:耗時2773ms,占用內存137.3MB。

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

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

相關文章

推理模型 vs 非推理模型:核心區別及優劣勢解析

推理能力上的差異 推理模型在推理能力方面表現突出,它們擅長通過生成中間步驟和“思維鏈”逐步解決復雜問題。這意味著面對數學計算、邏輯推理、多跳推斷等任務時,推理模型能夠將問題分解為若干子步驟,每一步給出推理結果,最終匯總得到答案。這種逐步推導的方式使得推理模…

OPENEULER搭建私有云存儲服務器

一、關閉防火墻和selinux 二、下載相關軟件 下載nginx&#xff0c;mariadb、php、nextcloud 下載nextcloud&#xff1a; sudo wget https://download.nextcloud.com/server/releases/nextcloud-30.0.1.zip sudo unzip nextcloud-30.0.1.zip -d /var/www/html/ sudo chown -R…

Docker 與微服務架構:從單體應用到容器化微服務的遷移實踐

隨著軟件系統規模和復雜性的日益增長,傳統的單體應用(Monolithic Application)在開發效率、部署靈活性和可伸縮性方面逐漸暴露出局限性。微服務架構(Microservice Architecture)作為一種將大型應用拆分為一系列小型、獨立、松耦合服務的模式,正成為現代企業構建彈性、敏捷…

【C#】Invalidate()的使用

Invalidate()的使用 Invalidate() 是 C# 中用于通知控件需要重新繪制的方法。它通常用于 Windows Forms 應用程序中&#xff0c;當想要更新控件的顯示內容時使用。調用 Invalidate() 方法后&#xff0c;系統會安排對該控件進行重繪&#xff0c;這將導致后續調用 OnPaint 方法&…

我店模式系統開發打造本地生活生態商圈

在當今快節奏的商業環境中&#xff0c;商家們面臨著越來越多的挑戰&#xff0c;包括市場競爭加劇、消費者需求多樣化以及運營效率的提高等。為了應對這些挑戰&#xff0c;越來越多的商家開始尋求信息化解決方案&#xff0c;以提升運營效率和客戶體驗。我的店模式系統平臺應運而…

Linux(Ubuntu)新建文件權限繼承問題

當你在一個工作目權限為777的文件下&#xff0c;新建一個文件的時候&#xff0c;就有可能發生&#xff0c;新建的這個文件&#xff0c;權限和其他文件&#xff0c;或者工作目錄不一致的問題&#xff0c;我們不可能每次新建一個文件&#xff0c;就要 sudo chmod -R 777 /PATH 所…

Vue3和React中插件化設計思想

Vue 3 和 React 都廣泛支持插件化設計思想&#xff0c;但因為它們的架構和理念不同&#xff0c;插件化的實現方式也不盡相同。以下分別詳細講解這兩者中如何實現插件化&#xff1a; &#x1f7e9; 一、Vue 3 中的插件化實現 Vue 3 繼承了 Vue 2 的插件機制&#xff0c;同時增強…

Excel 密碼忘記了?巧用PassFab for Excel 解密幫您找回數據!

在工作中&#xff0c;你是否遇到過這樣的尷尬時刻&#xff1f;打開重要的 Excel 文件&#xff0c;卻發現忘記密碼&#xff0c;里面的財務報表、客戶數據、項目計劃瞬間變成 “加密天書”。重新制作耗時耗力&#xff0c;找專業人員解密又擔心數據泄露&#xff0c;這個時候&#…

Vue3 與 Vue2 區別

一、Vue3 與 Vue2 區別 對于生命周期來說&#xff0c;整體上變化不大&#xff0c;只是大部分生命周期鉤子名稱上 “on”&#xff0c;功能上是類似的。不過有一點需要注意&#xff0c;組合式API的Vue3 中使用生命周期鉤子時需要先引入&#xff0c;而 Vue2 在選項API中可以直接…

Axure高級交互設計:中繼器嵌套動態面板實現超強體驗感臺賬

親愛的小伙伴,在您瀏覽之前,煩請關注一下,在此深表感謝!如有幫助請訂閱專欄! Axure產品經理精品視頻課已登錄CSDN可點擊學習https://edu.csdn.net/course/detail/40420 課程主題:中繼器嵌套動態面板 主要內容:中繼器內部嵌套動態面板,實現可移動式臺賬,增強數據表現…

Spring中用到的設計模式詳解

Spring 在設計和實現過程中大量使用了設計模式&#xff0c;這些設計模式不僅提升了 Spring 的靈活性和可擴展性&#xff0c;還為開發者提供了更高效、更優雅的編程方式。以下是 Spring 框架中使用的一些常見設計模式&#xff1a; 1. 單例模式&#xff08;Singleton Pattern&am…

Typescript學習教程,從入門到精通,TypeScript 集合類型語法知識點及案例代碼(11)

TypeScript 集合類型語法知識點及案例代碼 TypeScript 提供了多種集合類型&#xff0c;用于存儲和管理數據。以下將詳細介紹 數組&#xff08;Array&#xff09;、元組&#xff08;Tuple&#xff09;、集合&#xff08;Set&#xff09; 和 映射&#xff08;Map&#xff09;&am…

在 Win 10 上,Tcl/Tk 腳本2個示例

參閱&#xff1a;Tcl/Tk 教程 set PATH 新增 D:\Git\mingw64\bin where tclsh D:\Git\mingw64\bin\tclsh.exe where wish D:\Git\mingw64\bin\wish.exe 編寫 test_tk.tcl 如下 #!/usr/bin/tclsh # test 文件對話框 package require Tk# 彈出文件選擇對話框&#xff0c;限…

Qt環境的搭建

Qt安裝 Qt開發環境需要安裝三個部分 1.C編譯器(不是vs) 2.Qt SDK 3.需要一個Qt的集成開發環境 說是需要三個部分,但實際上是需要安裝Qt SDK就足夠了 QtSDK可以直接去官網下載 下載完成后需要配置一下環境變量 可以直接在系統中搜索"編輯系統環境變量" 為什么要…

Vue3中reactive響應式使用注意事項

Vue 3 的 reactive 是創建響應式對象的核心 API&#xff0c;但在使用過程中有一些需要注意的事項&#xff1a; 1&#xff1a;基本使用限制 僅對對象類型有效&#xff1a;reactive 只能用于對象類型&#xff08;Object、Array、Map、Set 等&#xff09;&#xff0c;不能用于原始…

STM32+rt-thread使用MQTT協議連接騰訊物聯網平臺

STM32rt-thread使用MQTT協議連接騰訊物聯網平臺 一、騰訊云sdk下載1、進入騰訊物聯網平臺文件[點擊鏈接跳轉](https://cloud.tencent.com.cn/document/product/1081/48356)2、下載csdk 二、移植騰訊云sdk1、將上面解壓的文件夾復制到自己工程目錄下2、文件添加到自己工程 三、連…

【MySQL成神之路】MySQL函數總結

以下是MySQL函數的全面總結&#xff0c;包含概念說明和代碼示例&#xff1a; 一、MySQL函數分類 1. 字符串函數 -- CONCAT&#xff1a;連接字符串 SELECT CONCAT(Hello, , World); -- 輸出 Hello World -- SUBSTRING&#xff1a;截取子串 SELECT SUBSTRING(MySQL, 2, 3…

JavaScript 異步編程、對象/數組操作

異步編程 JavaScript 是單線程語言&#xff0c;通過事件循環機制處理異步操作。任務分為兩種&#xff1a; 宏任務(Macrotask): script整體代碼、setTimeout&#xff08;時間結束執行&#xff09;、setInterval&#xff08;間隔執行&#xff09;、I/O、UI渲染 微任務(Microtas…

中小制造企業網絡安全防護指南

考慮到文章內容較長&#xff0c;簡要內容圖片在文檔末尾&#xff0c;請直接翻閱到底部查看 引言&#xff1a;中小制造企業面臨的獨特網絡安全挑戰 中小制造企業 (SME) 在當今數字化浪潮中扮演著至關重要的角色&#xff0c;然而&#xff0c;伴隨技術進步而來的是日益嚴峻且獨特…

es學習小結

1.?客戶端類型? ?推薦場景? ?版本兼容性? Elasticsearch Java API Client 新項目、ES 8.x集群 8.x及以上 Spring Data Elasticsearch Spring生態項目、簡化ORM操作 ES 7.x-8.x&#xff08;需版本匹配&#xff09; Low-Level REST Client 需要底層HTTP控制、兼容多版本ES …