import
java.util.*;
public
class
GFG {
static
int
N;
static
ArrayList<ArrayList<Integer> > H;
static
int
[] Fruit;
static
int
[] Parent;
static
int
[][] dp;
static
void
dfs1(ArrayList<ArrayList<Integer> > tree,
int
s,
int
p,
int
h)
{
Parent[s] = p;
int
i;
H.get(h).add(s);
for
(i =
0
; i < tree.get(s).size(); i++) {
int
v = tree.get(s).get(i);
if
(v != p)
dfs1(tree, v, s, h +
1
);
}
}
static
int
dfs2(ArrayList<ArrayList<Integer> > tree,
int
s,
int
p,
int
h,
int
j)
{
int
i;
int
ans =
0
;
if
(dp[s][j] != -
1
)
return
dp[s][j];
if
(j >
0
) {
for
(i =
0
; i < H.get(h).size(); i++) {
int
v = H.get(h).get(i);
if
(v != s)
ans = Math.max(
ans,
dfs2(tree, v, Parent[v], h, j -
1
));
}
}
for
(i =
0
; i < tree.get(s).size(); i++) {
int
v = tree.get(s).get(i);
if
(v != p)
ans = Math.max(ans,
dfs2(tree, v, s, h +
1
, j));
}
if
(Fruit[s] ==
1
)
ans++;
dp[s][j] = ans;
return
ans;
}
static
int
maxFruit(ArrayList<ArrayList<Integer> > tree,
int
NodesWithFruits[],
int
n,
int
m,
int
k)
{
for
(
int
i =
0
; i < N; i++) {
for
(
int
j =
0
; j <
20
; j++)
dp[i][j] = -
1
;
Fruit[i] =
0
;
}
for
(
int
i =
0
; i < m; i++)
Fruit[NodesWithFruits[i]] =
1
;
dfs1(tree,
1
,
0
,
0
);
int
ans = dfs2(tree,
1
,
0
,
0
, k);
return
ans;
}
static
void
addEdge(ArrayList<ArrayList<Integer> > tree,
int
u,
int
v)
{
tree.get(u).add(v);
tree.get(v).add(u);
}
public
static
void
main(String[] args)
{
N =
1000
;
H =
new
ArrayList<>();
Fruit =
new
int
[N];
Parent =
new
int
[N];
dp =
new
int
[N][
20
];
int
n =
12
;
int
k =
2
;
ArrayList<ArrayList<Integer> > tree
=
new
ArrayList<>();
for
(
int
i =
0
; i < N; i++) {
tree.add(
new
ArrayList<>());
H.add(
new
ArrayList<>());
}
addEdge(tree,
1
,
2
);
addEdge(tree,
1
,
3
);
addEdge(tree,
2
,
4
);
addEdge(tree,
2
,
5
);
addEdge(tree,
5
,
9
);
addEdge(tree,
9
,
10
);
addEdge(tree,
9
,
11
);
addEdge(tree,
11
,
12
);
addEdge(tree,
3
,
7
);
addEdge(tree,
7
,
6
);
addEdge(tree,
7
,
8
);
int
NodesWithFruits[]
= {
2
,
4
,
5
,
7
,
8
,
9
,
11
,
12
};
int
m = NodesWithFruits.length;
int
ans = maxFruit(tree, NodesWithFruits, n, m, k);
System.out.println(ans);
}
}