import
java.util.ArrayList;
import
java.util.Arrays;
import
java.util.List;
class
Main {
static
List<Integer> color;
static
List<Integer> dp;
static
List<Integer> ans;
static
List<List<Integer>> adj;
static
void
dfs(
int
v,
int
p) {
dp.set(v, color.get(v));
for
(
int
to : adj.get(v)) {
if
(to == p)
continue
;
dfs(to, v);
dp.set(v, dp.get(v) + Math.max(dp.get(to),
0
));
}
}
static
void
dfs2(
int
v,
int
p) {
ans.set(v, dp.get(v));
for
(
int
to : adj.get(v)) {
if
(to == p)
continue
;
dp.set(v, dp.get(v) - Math.max(
0
, dp.get(to)));
dp.set(to, dp.get(to) + Math.max(
0
, dp.get(v)));
dfs2(to, v);
dp.set(to, dp.get(to) - Math.max(
0
, dp.get(v)));
dp.set(v, dp.get(v) + Math.max(
0
, dp.get(to)));
}
}
public
static
void
main(String[] args) {
int
n =
9
;
dp =
new
ArrayList<>(Arrays.asList(
new
Integer[n]));
ans =
new
ArrayList<>(Arrays.asList(
new
Integer[n]));
adj =
new
ArrayList<>(n);
color = Arrays.asList(
0
,
1
,
1
,
1
,
0
,
0
,
0
,
0
,
1
);
for
(
int
i =
0
; i < n; ++i) {
if
(color.get(i) ==
0
)
color.set(i, -
1
);
}
List<List<Integer>> edges = Arrays.asList(
Arrays.asList(
1
,
2
), Arrays.asList(
1
,
3
), Arrays.asList(
3
,
4
),
Arrays.asList(
3
,
5
), Arrays.asList(
2
,
6
), Arrays.asList(
4
,
7
),
Arrays.asList(
6
,
8
), Arrays.asList(
5
,
9
)
);
for
(
int
i =
0
; i < n; ++i) {
adj.add(
new
ArrayList<>());
}
for
(
int
i =
0
; i < n -
1
; ++i) {
int
x = edges.get(i).get(
0
), y = edges.get(i).get(
1
);
--x;
--y;
adj.get(x).add(y);
adj.get(y).add(x);
}
dfs(
0
, -
1
);
dfs2(
0
, -
1
);
for
(
int
it : ans)
System.out.print(it +
" "
);
System.out.println();
}
}