From 3d94709aa2f0d09415c37170b86dcc2f083d5dfe Mon Sep 17 00:00:00 2001 From: Nikita Karmakar Date: Sat, 21 Dec 2024 10:25:16 +0530 Subject: [PATCH] Create Maximum Number of K-Divisible Components --- Maximum Number of K-Divisible Components | 40 ++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 Maximum Number of K-Divisible Components diff --git a/Maximum Number of K-Divisible Components b/Maximum Number of K-Divisible Components new file mode 100644 index 0000000..a5f7716 --- /dev/null +++ b/Maximum Number of K-Divisible Components @@ -0,0 +1,40 @@ +class Solution { + public int maxKDivisibleComponents(int n, int[][] edges, int[] vals, int k) { + if (n < 2) return 1; + + List> graph = new ArrayList<>(); + for (int i = 0; i < n; i++) graph.add(new ArrayList<>()); + int[] degree = new int[n]; + + for (int[] edge : edges) { + graph.get(edge[0]).add(edge[1]); + graph.get(edge[1]).add(edge[0]); + degree[edge[0]]++; + degree[edge[1]]++; + } + + long[] nodeVals = new long[n]; + for (int i = 0; i < n; i++) nodeVals[i] = vals[i]; + Queue leafQ = new LinkedList<>(); + for (int i = 0; i < n; i++) if (degree[i] == 1) leafQ.add(i); + + int compCnt = 0; + while (!leafQ.isEmpty()) { + int curr = leafQ.poll(); + degree[curr]--; + long carry = 0; + + if (nodeVals[curr] % k == 0) compCnt++; + else carry = nodeVals[curr]; + + for (int nbr : graph.get(curr)) { + if (degree[nbr] == 0) continue; + degree[nbr]--; + nodeVals[nbr] += carry; + if (degree[nbr] == 1) leafQ.add(nbr); + } + } + + return compCnt; + } +}