Here is the dominant color sum implementation:
function lomsatGelral(n, adj, color):
answer = array of size n
count = array of n empty maps // map: color -> frequency
function dfs(u, parent):
bigChild = -1
bigSize = 0
for v in adj[u]:
if v != parent:
dfs(v, u)
if count[v].size > bigSize:
bigSize = count[v].size
bigChild = v
// Take largest child's map
if bigChild != -1:
swap(count[u], count[bigChild])
maxFreq = 0
sum = 0
// Merge smaller children
for v in adj[u]:
if v != parent and v != bigChild:
for (c, freq) in count[v]:
count[u][c] = count[u][c] + freq
// Add current color
count[u][color[u]] = count[u][color[u]] + 1
// Compute sum of max-frequency colors
for (c, freq) in count[u]:
if freq > maxFreq:
maxFreq = freq
sum = c
else if freq == maxFreq:
sum = sum + c
answer[u] = sum
dfs(1, 0)
return answer
Time: . Space: .