-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy path2872.cpp
More file actions
28 lines (28 loc) · 905 Bytes
/
Copy path2872.cpp
File metadata and controls
28 lines (28 loc) · 905 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
class Solution {
public:
pair<int, int> dfs(int v, int p, int k, vector<int> &values, vector<vector<int>> &G){
int sum = values[v];
int n_segments = 0;
for(int c : G[v]){
if(c == p) continue;
pair<int, int> c_res = dfs(c, v, k, values, G);
sum += c_res.first;
sum %= k;
n_segments += c_res.second;
}
if(sum % k == 0){
sum = 0;
n_segments++;
}
return {sum, n_segments};
}
int maxKDivisibleComponents(int n, vector<vector<int>>& edges, vector<int>& values, int k) {
vector<vector<int>> G(n, vector<int>());
for(int i = 0; i < n-1; i++){
G[edges[i][0]].push_back(edges[i][1]);
G[edges[i][1]].push_back(edges[i][0]);
}
pair<int, int> res = dfs(0, -1, k, values, G);
return res.second;
}
};