Graph
LeetCode 834: Sum of Distances in Tree
·2 分鐘
LeetCode
Hard
Dynamic-Programming
Tree
Depth-First-Search
Graph
Dp-on-Trees
LeetCode 834 解題筆記:換根 DP:先以 0 為根算子樹大小和 ans[0],再用 ans[child] = ans[parent] - size + (n - size) 推到每個節點
LeetCode 2858: Minimum Edge Reversals So Every Node Is Reachable
·1 分鐘
LeetCode
Hard
Dynamic-Programming
Depth-First-Search
Breadth-First-Search
Graph
LeetCode 2858 解題筆記:換根 DP:先算以 0 為根要翻幾條邊,根移到小孩時,這條邊原本順向就 +1、逆向就 -1
LeetCode 3787: Find Diameter Endpoints of a Tree
·1 分鐘
LeetCode
Medium
Tree
Breadth-First-Search
Graph
LeetCode 3787 解題筆記:兩次 BFS 找到一條直徑的兩端 A、B;任一點最遠的點一定是 A 或 B,所以 max(dist(A,i), dist(B,i)) 等於直徑的點就是某條直徑的端點
BFS 與圖的遍歷
·3 分鐘
演算法
Bfs
Dfs
Graph
Matrix
Union-Find
連通塊、網格 flood fill、多源 BFS、狀態空間 BFS、最短環,以及遞迴 DFS 的深度問題
LeetCode 3203: Find Minimum Diameter After Merging Two Trees
·2 分鐘
LeetCode
Hard
Tree
Bfs
Dfs
Graph
Tree-Diameter
LeetCode 3203 解題筆記:連接兩棵樹的中心,答案是 max(d1, d2, ceil(d1/2) + ceil(d2/2) + 1)
LeetCode 3313: Find the Last Marked Nodes in Tree
·1 分鐘
LeetCode
Hard
Tree
Bfs
Graph
Tree-Diameter
LeetCode 3313 解題筆記:最後被標記的就是最遠的點,而最遠點一定能取直徑端點
LeetCode 2608: Shortest Cycle in a Graph
·2 分鐘
LeetCode
Hard
Bfs
Graph
LeetCode 2608 解題筆記:從每個點 BFS,遇到已拜訪而且不是 parent 的鄰居,就找到一個長度 dist[u] + dist[v] + 1 的環
Topological Sort
·2 分鐘
演算法
Graph
Topological-Sort
Kahn
排序、cycle detection、dependency unlocking 與 graph propagation
Shortest Path
·2 分鐘
演算法
Graph
Shortest-Path
Dijkstra
Bellman-Ford
Dijkstra、minimax path 與有邊數限制的 Bellman-Ford
LeetCode 4046: Minimum Cost Path With At Most K Turns
·2 分鐘
LeetCode
Hard
Graph
Shortest-Path
Heap
Matrix
LeetCode 4046 解題筆記:Dijkstra 的狀態加上「上一步方向」和「已轉彎數」;同一格同方向時,先處理的成本較低,轉彎數也較少的話就支配後面的狀態
LeetCode 499: The Maze III
·2 分鐘
LeetCode
Hard
Graph
Dijkstra
Shortest-Path
Heap
Matrix
LeetCode 499 解題筆記:Dijkstra 的優先度用 (距離, 路徑字串),滾動途中經過洞就要停下
LeetCode 323: Number of Connected Components in an Undirected Graph
·2 分鐘
LeetCode
Medium
Graph
Dfs
Bfs
Union-Find
LeetCode 323 解題筆記:DFS 或 Union-Find 數連通塊;Union-Find 沒有路徑壓縮會慢很多