-
-
Notifications
You must be signed in to change notification settings - Fork 8.9k
/
Copy pathSolution.java
42 lines (39 loc) · 985 Bytes
/
Solution.java
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
38
39
40
41
42
class Solution {
private int n;
private int[] ans;
private int[] size;
private List<Integer>[] g;
public int[] sumOfDistancesInTree(int n, int[][] edges) {
this.n = n;
g = new List[n];
ans = new int[n];
size = new int[n];
Arrays.setAll(g, k -> new ArrayList<>());
for (var e : edges) {
int a = e[0], b = e[1];
g[a].add(b);
g[b].add(a);
}
dfs1(0, -1, 0);
dfs2(0, -1, ans[0]);
return ans;
}
private void 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];
}
}
}
private void 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]);
}
}
}
}