• + 0 comments

    Javascript

    let cnt = 0;
    function Dfs(visited, tree, i) {
        if (visited[i]) {
            return;
        }
        
        visited[i] = true;
        ++cnt
        if (tree[i]) {
            for (let v of tree[i]) {
                Dfs(visited, tree, v);
            }
        }
    }
    
    /*
     * Complete the 'journeyToMoon' function below.
     *
     * The function is expected to return an INTEGER.
     * The function accepts following parameters:
     *  1. INTEGER n
     *  2. 2D_INTEGER_ARRAY astronaut
     */
    
    function journeyToMoon(n, astronaut) {
        // Write your code here
        let tree = {};
        for (const [a1, a2] of astronaut) {
            tree[a1] = tree[a1] ?? new Set();
            tree[a2] = tree[a2] ?? new Set();
            tree[a1].add(a2);
            tree[a2].add(a1);
        }
        let a = [];
        let ans = 0;
    
        for (let i=0;i<n;++i) {
            if (!visited[i]) {
                Dfs(visited, tree, i);
                a.push(cnt);
                cnt = 0;
            }
        }
        
        for (let i=0;i<a.length;++i) {
            for (let j=i+1;j<a.length;++j) {
                ans += a[i] * a[j];
            }
        }
        return ans;
    }