-
-
Notifications
You must be signed in to change notification settings - Fork 8.9k
/
Copy pathSolution.cpp
37 lines (34 loc) · 988 Bytes
/
Solution.cpp
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
29
30
31
32
33
34
35
36
37
class Solution {
public:
vector<int> sumOfDistancesInTree(int n, vector<vector<int>>& edges) {
vector<vector<int>> g(n);
for (auto& e : edges) {
int a = e[0], b = e[1];
g[a].push_back(b);
g[b].push_back(a);
}
vector<int> ans(n);
vector<int> size(n);
function<void(int, int, int)> dfs1 = [&](int i, int fa, int d) {
ans[0] += d;
size[i] = 1;
for (int& j : g[i]) {
if (j != fa) {
dfs1(j, i, d + 1);
size[i] += size[j];
}
}
};
function<void(int, int, int)> dfs2 = [&](int i, int fa, int t) {
ans[i] = t;
for (int& j : g[i]) {
if (j != fa) {
dfs2(j, i, t - size[j] + n - size[j]);
}
}
};
dfs1(0, -1, 0);
dfs2(0, -1, ans[0]);
return ans;
}
};