20240604 3067 - Medium - Graph DFS
3067. Count Pairs of Connectable Servers in a Weighted Tree Network
class Solution:
def countPairsOfConnectableServers(self, edges: List[List[int]], signalSpeed: int) -> List[int]:
n = len(edges) + 1
g = [[] for _ in range(n)]
for x, y, wt in edges:
g[x].append((y, wt))
g[y].append((x, wt))
def dfs(x: int, fa: int, s: int) -> int:
cnt = 0 if s % signalSpeed else 1
for y, wt in g[x]:
if y != fa:
cnt += dfs(y, x, s + wt)
return cnt
ans = [0] * n
for i, gi in enumerate(g):
if len(gi) == 1:
continue
s = 0
for y, wt in gi:
cnt = dfs(y, i, wt)
ans[i] += cnt * s
s += cnt
return ans