LeetCode 834 樹中距離之和
給定一個無向、連通的樹。樹中有 N 個標記為 0...N-1 的節點以及 N-1 條邊 。
第 i 條邊連線節點 edges[i][0] 和 edges[i][1] 。
返回一個表示節點 i 與其他所有節點距離之和的列表 ans。
參考標準解析:連結寫的答案。
from typing import *
class Solution:
def __init__(self):
self.ans = None
self.num_nodes = None
self.dp = None
self.graph = None
self.visited = None
def sumOfDistancesInTree(self, N: int, edges: List[List[int]]) -> List[int]:
self.ans = [0] * N
self.num_nodes = [0] * N
self.dp = [0] * N
self.visited = [False] * N
self.graph = [[] for _ in range(N)]
for edge in edges:
self.graph[edge[0]].append(edge[1])
self.graph[edge[1]].append(edge[0])
self.dfs1(0)
self.visited = [False] * N
self.dfs2(0)
return self.ans
def dfs1(self, i):
self.visited[i] = True
self.num_nodes[i] = 1
for j in self.graph[i]:
if not self.visited[j]:
self.dfs1(j)
self.dp[i] += (self.dp[j] + self.num_nodes[j])
self.num_nodes[i] += self.num_nodes[j]
def dfs2(self, i):
self.ans[i] = self.dp[i]
self.visited[i] = True
for j in self.graph[i]:
if not self.visited[j]:
self.dp[i] -= (self.dp[j] + self.num_nodes[j])
self.num_nodes[i] -= self.num_nodes[j]
self.dp[j] += (self.dp[i] + self.num_nodes[i])
self.num_nodes[j] += self.num_nodes[i]
self.dfs2(j)
self.num_nodes[j] -= self.num_nodes[i]
self.dp[j] -= (self.dp[i] + self.num_nodes[i])
self.num_nodes[i] += self.num_nodes[j]
self.dp[i] += (self.dp[j] + self.num_nodes[j])
相關文章
- leetcode-834. 樹中距離之和LeetCode
- 834. 樹中距離之和-困難-樹、圖、動態規劃、深度優先搜尋動態規劃
- LeetCode 461. 漢明距離LeetCode
- LeetCode72編輯距離LeetCode
- 二叉樹最大距離(直徑)二叉樹
- leetcode演算法熱題--兩樹之和LeetCode演算法
- 45.LeetCode461. 漢明距離LeetCode
- Java LeetCode 72. 編輯距離JavaLeetCode
- 二叉樹:距離最近的共同祖先二叉樹
- Leetcode 編輯距離(動態規劃)LeetCode動態規劃
- JavaScript 元素距離視窗頂部的距離JavaScript
- 二叉樹中相距最遠的兩個節點之間的距離二叉樹
- 程式設計之美leetcode之編輯距離程式設計LeetCode
- PostgreSQL遺傳學應用-矩陣相似距離計算(歐式距離,…XX距離)SQL矩陣
- 二叉樹任意兩個節點間的最大距離(Java,LeetCode 543二叉樹的直徑 遞迴)二叉樹JavaLeetCode遞迴
- 編輯距離及編輯距離演算法演算法
- JavaScript獲取元素距離文件頂部的距離JavaScript
- Laravel 距離排序Laravel排序
- 最小距離分類器,互動式選取影像樣本分類資料,進行最小距離分類(實現歐式距離,馬氏距離,計程距離)
- jQuery獲取網頁中的元素距離文件邊緣的距離程式碼例項jQuery網頁
- 【leetcode】72. Edit Distance 編輯距離計算LeetCode
- 【Leetcode 每日一題】1030. 距離順序排列矩陣單元格(水題,曼哈頓距離排序)LeetCode每日一題矩陣排序
- 二叉樹中最遠的兩個結點的距離二叉樹
- javascript獲取元素距離網頁頂部的距離JavaScript網頁
- 曼哈頓距離與切比雪夫距離的互化
- LeetCode:兩數之和LeetCode
- LeetCode - 兩數之和LeetCode
- 數學中的常見的距離公式公式
- ggplot2中繪圖設定x軸、y軸名稱距離框線的距離繪圖
- 距離度量學習
- 【DP】編輯距離
- LeetCode 1 兩數之和LeetCode
- leetcode #1 兩數之和LeetCode
- LeetCode之兩數之和LeetCode
- 場景設計中距離感的設計
- Vijos1680距離/openjudge2988計算字串的距離[DP]字串
- 空間距離計算
- LeetCode: Two sum(兩數之和)LeetCode