< Summary

Information
Class: LeetCode.Algorithms.MaximizeTheNumberOfTargetNodesAfterConnectingTrees1.MaximizeTheNumberOfTargetNodesAfterConnectingTrees1DepthFirstSearch
Assembly: LeetCode
File(s): D:\a\LeetCode-CS\LeetCode-CS\source\LeetCode\Algorithms\MaximizeTheNumberOfTargetNodesAfterConnectingTrees1\MaximizeTheNumberOfTargetNodesAfterConnectingTrees1DepthFirstSearch.cs
Line coverage
96%
Covered lines: 52
Uncovered lines: 2
Coverable lines: 54
Total lines: 107
Line coverage: 96.2%
Branch coverage
94%
Covered branches: 17
Total branches: 18
Branch coverage: 94.4%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
MaxTargetNodes(...)100%44100%
BuildGraph(...)100%44100%
CountWithin(...)90%101091.66%

File(s)

D:\a\LeetCode-CS\LeetCode-CS\source\LeetCode\Algorithms\MaximizeTheNumberOfTargetNodesAfterConnectingTrees1\MaximizeTheNumberOfTargetNodesAfterConnectingTrees1DepthFirstSearch.cs

#LineLine coverage
 1// --------------------------------------------------------------------------------
 2// Copyright (C) 2025 Eugene Eremeev (also known as Yevhenii Yeriemeieiv).
 3// All Rights Reserved.
 4// --------------------------------------------------------------------------------
 5// This software is the confidential and proprietary information of Eugene Eremeev
 6// (also known as Yevhenii Yeriemeieiv) ("Confidential Information"). You shall not
 7// disclose such Confidential Information and shall use it only in accordance with
 8// the terms of the license agreement you entered into with Eugene Eremeev (also
 9// known as Yevhenii Yeriemeieiv).
 10// --------------------------------------------------------------------------------
 11
 12namespace LeetCode.Algorithms.MaximizeTheNumberOfTargetNodesAfterConnectingTrees1;
 13
 14/// <inheritdoc />
 15public class MaximizeTheNumberOfTargetNodesAfterConnectingTrees1DepthFirstSearch :
 16    IMaximizeTheNumberOfTargetNodesAfterConnectingTrees1
 17{
 18    /// <summary>
 19    ///     Time complexity - O(n^2 + m^2)
 20    ///     Space complexity - O(n + m)
 21    /// </summary>
 22    /// <param name="edges1"></param>
 23    /// <param name="edges2"></param>
 24    /// <param name="k"></param>
 25    /// <returns></returns>
 26    public int[] MaxTargetNodes(int[][] edges1, int[][] edges2, int k)
 227    {
 228        var n = edges1.Length + 1;
 229        var m = edges2.Length + 1;
 30
 231        var graph1 = BuildGraph(edges1, n);
 232        var graph2 = BuildGraph(edges2, m);
 33
 234        var bestFromGraph2 = 0;
 35
 2836        for (var j = 0; j < m; j++)
 1237        {
 1238            bestFromGraph2 = Math.Max(bestFromGraph2, CountWithin(graph2, j, k - 1));
 1239        }
 40
 241        var result = new int[n];
 42
 2443        for (var i = 0; i < n; i++)
 1044        {
 1045            result[i] = CountWithin(graph1, i, k) + bestFromGraph2;
 1046        }
 47
 248        return result;
 249    }
 50
 51    private static List<int>[] BuildGraph(int[][] edges, int size)
 452    {
 453        var graph = new List<int>[size];
 54
 5255        for (var i = 0; i < size; i++)
 2256        {
 2257            graph[i] = [];
 2258        }
 59
 4860        foreach (var edge in edges)
 1861        {
 1862            graph[edge[0]].Add(edge[1]);
 1863            graph[edge[1]].Add(edge[0]);
 1864        }
 65
 466        return graph;
 467    }
 68
 69    private static int CountWithin(List<int>[] graphs, int start, int maxDepth)
 2270    {
 2271        if (maxDepth < 0)
 072        {
 073            return 0;
 74        }
 75
 2276        var count = 0;
 77
 2278        var visited = new bool[graphs.Length];
 79
 2280        var nodesQueue = new Queue<(int Index, int Depth)>();
 81
 2282        nodesQueue.Enqueue((start, 0));
 83
 2284        visited[start] = true;
 85
 8286        while (nodesQueue.Count > 0)
 6087        {
 6088            var node = nodesQueue.Dequeue();
 89
 6090            count++;
 91
 6092            if (node.Depth == maxDepth)
 3493            {
 3494                continue;
 95            }
 96
 20097            foreach (var graph in graphs[node.Index].Where(graph => !visited[graph]))
 3898            {
 3899                visited[graph] = true;
 100
 38101                nodesQueue.Enqueue((graph, node.Depth + 1));
 38102            }
 26103        }
 104
 22105        return count;
 22106    }
 107}