Graph Theory37 sections · 1633 units
Open in Course

Lomsat gelral - Implementation

(C++ with maps)

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: O(nlogn)O(n \log n). Space: O(n)O(n).