import
java.util.*;
public
class
Main {
static
int
cent1,cent2;
static
int
[] size;
static
int
val;
static
void
dfs(
int
n,
int
par,
ArrayList <ArrayList <Integer>> ar,
int
some,
int
tot)
{
size[n] =
1
;
int
mx =
0
;
for
(
int
child : ar.get(n)) {
if
(child != par) {
dfs(child, n, ar, some, tot);
size[n] += size[child];
mx = Math.max(mx, size[child]);
}
}
mx = Math.max(mx, tot - size[n]);
if
(mx < some) {
some = mx;
cent1 = n;
cent2 = -
1
;
}
else
if
(mx == some) {
cent2 = n;
}
}
static
void
dfs2(
int
n,
int
par,
ArrayList <ArrayList<Integer>> ar)
{
val++;
for
(
int
child : ar.get(n)) {
if
(child != par) {
dfs2(child, n, ar);
}
}
}
static
int
minimumEdges(
int
n,
int
[][] edges)
{
ArrayList <ArrayList <Integer>> ar
=
new
ArrayList <ArrayList<Integer>> (n);
for
(
int
i=
0
; i<n; i++){
ar.add(
new
ArrayList <Integer> () );
}
size =
new
int
[n];
Arrays.fill(size,
0
);
for
(
int
i =
0
; i < n -
1
; i++) {
ar.get(edges[i][
0
])
.add(edges[i][
1
]);
ar.get(edges[i][
1
])
.add(edges[i][
0
]);
}
cent1 = -
1
;
cent2 = -
1
;
int
some =
1000000
;
dfs(
0
, -
1
, ar, some, n);
if
(cent2 != -
1
) {
return
1
;
}
ArrayList <Integer> subtree_size =
new
ArrayList <Integer> ();
for
(
int
x : ar.get(cent1) ) {
val =
0
;
dfs2(x, cent1, ar);
subtree_size.add(val);
}
int
sum =
0
;
int
ans =
0
;
Collections.sort(subtree_size);
for
(
int
x : subtree_size) {
sum += x;
ans++;
if
(n - sum <= n /
2
) {
break
;
}
}
return
ans;
}
public
static
void
main(String args[])
{
int
N =
3
;
int
[][] edges
= { {
0
,
1
}, {
0
,
2
} };
System.out.println( minimumEdges(N, edges) );
}
}