|  | 
|  | 1 | +class Solution { | 
|  | 2 | + | 
|  | 3 | +    int dfs(int u, int par, vector<int> *adj, int k) { | 
|  | 4 | + | 
|  | 5 | +        if(k < 0) { | 
|  | 6 | +            return 0; | 
|  | 7 | +        } | 
|  | 8 | + | 
|  | 9 | +        int res = 1; | 
|  | 10 | +        for(auto v: adj[u]) { | 
|  | 11 | + | 
|  | 12 | +            if(v == par) continue; | 
|  | 13 | + | 
|  | 14 | +            res += dfs(v, u, adj, k - 1); | 
|  | 15 | +        } | 
|  | 16 | + | 
|  | 17 | +        return res; | 
|  | 18 | +    } | 
|  | 19 | +public: | 
|  | 20 | +    vector<int> maxTargetNodes(vector<vector<int>>& edges1, vector<vector<int>>& edges2, int k) { | 
|  | 21 | + | 
|  | 22 | +        int n = edges1.size() + 1; | 
|  | 23 | +        int m = edges2.size() + 1; | 
|  | 24 | + | 
|  | 25 | +        vector<int> adj1[n + 1]; | 
|  | 26 | +        vector<int> adj2[m + 1]; | 
|  | 27 | + | 
|  | 28 | +        for(const auto &edge1: edges1) { | 
|  | 29 | +            adj1[edge1[0]].push_back(edge1[1]); | 
|  | 30 | +            adj1[edge1[1]].push_back(edge1[0]); | 
|  | 31 | +        } | 
|  | 32 | + | 
|  | 33 | +        for(const auto &edge2: edges2) { | 
|  | 34 | +            adj2[edge2[0]].push_back(edge2[1]); | 
|  | 35 | +            adj2[edge2[1]].push_back(edge2[0]); | 
|  | 36 | +        } | 
|  | 37 | + | 
|  | 38 | +        vector<int> cnt1(n, 0); | 
|  | 39 | +        vector<int> cnt2(m, 0); | 
|  | 40 | + | 
|  | 41 | +        int mx2 = 0; | 
|  | 42 | +        for(int i = 0; i < m; i++) { | 
|  | 43 | +            cnt2[i] = dfs(i, - 1, adj2, k - 1); | 
|  | 44 | +            mx2 = max(mx2, cnt2[i]); | 
|  | 45 | +        } | 
|  | 46 | + | 
|  | 47 | +        for(int i = 0; i < n; i++) { | 
|  | 48 | +            cnt1[i] = dfs(i, - 1, adj1, k) + mx2; | 
|  | 49 | +             | 
|  | 50 | +        } | 
|  | 51 | + | 
|  | 52 | +        return cnt1; | 
|  | 53 | +    }  | 
|  | 54 | +}; | 
0 commit comments