Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit a3476f4

Browse files
committed
更新题解列表
1 parent 957ed31 commit a3476f4

File tree

2 files changed

+32
-41
lines changed

2 files changed

+32
-41
lines changed

‎Solutions/1617. 统计子树中城市之间最大距离.md‎

Lines changed: 19 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -57,41 +57,34 @@
5757

5858
```Python
5959
class Solution:
60-
def __init__(self):
61-
self.visited = 0
62-
self.diameter = 0
63-
64-
def dfs(self, graph, mask, u):
65-
self.visited |= 1 << u # 标记 u 访问过
66-
u_len = 0 # u 节点的最大路径长度
67-
for v in graph[u]: # 遍历 u 节点的相邻节点
68-
if self.visited >> v & 1 == 0 and mask >> v & 1: # v 没有访问过,且在子集中
69-
v_len = self.dfs(graph, mask, v) # 相邻节点的最大路径长度
70-
self.diameter = max(self.diameter, u_len + v_len + 1) # 维护最大路径长度
71-
u_len = max(u_len, v_len + 1) # 更新 u 节点的最大路径长度
72-
return u_len
73-
74-
75-
7660
def countSubgraphsForEachDiameter(self, n: int, edges: List[List[int]]) -> List[int]:
77-
# 建图
78-
graph = [[] for _ in range(n)]
61+
graph = [[] for _ in range(n)] # 建图
7962
for u, v in edges:
8063
graph[u - 1].append(v - 1)
8164
graph[v - 1].append(u - 1)
8265

66+
def dfs(mask, u):
67+
nonlocal visited, diameter
68+
visited |= 1 << u # 标记 u 访问过
69+
u_len = 0 # u 节点的最大路径长度
70+
for v in graph[u]: # 遍历 u 节点的相邻节点
71+
if (visited >> v) & 1 == 0 and mask >> v & 1: # v 没有访问过,且在子集中
72+
v_len = dfs(mask, v) # 相邻节点的最大路径长度
73+
diameter = max(diameter, u_len + v_len + 1) # 维护最大路径长度
74+
u_len = max(u_len, v_len + 1) # 更新 u 节点的最大路径长度
75+
return u_len
76+
8377
ans = [0 for _ in range(n - 1)]
8478

85-
86-
for mask in range(3, 1 << n): # 二进制枚举子集
87-
if mask & (mask - 1) == 0: # 子集至少需要两个点
79+
for mask in range(3, 1 << n): # 二进制枚举子集
80+
if mask & (mask - 1) == 0: # 子集至少需要两个点
8881
continue
89-
self.visited = 0
90-
self.diameter = 0
82+
visited = 0
83+
diameter = 0
9184
u = mask.bit_length() - 1
92-
self.dfs(graph, mask, u) # 在子集 mask 中递归求树的直径
93-
if self.visited == mask:
94-
ans[self.diameter - 1] += 1
85+
dfs(mask, u) # 在子集 mask 中递归求树的直径
86+
if visited == mask:
87+
ans[diameter - 1] += 1
9588
return ans
9689
```
9790

‎Solutions/2246. 相邻字符不同的最长路径.md‎

Lines changed: 13 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -70,18 +70,6 @@
7070

7171
```Python
7272
class Solution:
73-
def __init__(self):
74-
self.ans = 0
75-
76-
def dfs(self, graph, s, u):
77-
u_len = 0 # u 节点的最大路径长度
78-
for v in graph[u]: # 遍历 u 节点的相邻节点
79-
v_len = self.dfs(graph, s, v) # 相邻节点的最大路径长度
80-
if s[u] != s[v]: # 相邻节点字符不同
81-
self.ans = max(self.ans, u_len + v_len + 1) # 维护最大路径长度
82-
u_len = max(u_len, v_len + 1) # 更新 u 节点的最大路径长度
83-
return u_len # 返回 u 节点的最大路径长度
84-
8573
def longestPath(self, parent: List[int], s: str) -> int:
8674
size = len(parent)
8775

@@ -90,9 +78,19 @@ class Solution:
9078
for i in range(1, size):
9179
graph[parent[i]].append(i)
9280

93-
self.dfs(graph, s, 0)
94-
95-
return self.ans + 1
81+
ans = 0
82+
def dfs(u):
83+
nonlocal ans
84+
u_len = 0 # u 节点的最大路径长度
85+
for v in graph[u]: # 遍历 u 节点的相邻节点
86+
v_len = dfs(v) # 相邻节点的最大路径长度
87+
if s[u] != s[v]: # 相邻节点字符不同
88+
ans = max(ans, u_len + v_len + 1) # 维护最大路径长度
89+
u_len = max(u_len, v_len + 1) # 更新 u 节点的最大路径长度
90+
return u_len # 返回 u 节点的最大路径长度
91+
92+
dfs(0)
93+
return ans + 1
9694
```
9795

9896
### 思路 1:复杂度分析

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /