import
java.util.ArrayList;
import
java.util.Collections;
import
java.util.HashMap;
import
java.util.List;
public
class
Main {
static
List<Integer> size;
static
int
traversal(List<Integer> ans, HashMap<Integer, List<Integer>> adj,
int
node,
int
parent,
int
depth) {
size.set(node,
1
);
for
(
int
a : adj.get(node)) {
if
(a != parent) {
size.set(node, size.get(node) + traversal(ans, adj, a, node, depth +
1
));
}
}
ans.add(size.get(node) - depth);
return
size.get(node);
}
static
int
findMaxPrizes(
int
n,
int
m,
int
[][] edges) {
List<Integer> ans =
new
ArrayList<>();
HashMap<Integer, List<Integer>> adj =
new
HashMap<>();
size =
new
ArrayList<>(Collections.nCopies(n +
1
,
0
));
for
(
int
[] edge : edges) {
int
x = edge[
0
];
int
y = edge[
1
];
adj.computeIfAbsent(x, k ->
new
ArrayList<>()).add(y);
adj.computeIfAbsent(y, k ->
new
ArrayList<>()).add(x);
}
traversal(ans, adj,
1
, -
1
,
1
);
Collections.sort(ans, Collections.reverseOrder());
int
i =
0
;
int
totalSum =
0
;
while
(i < n - m) {
totalSum += ans.get(i);
i++;
}
return
totalSum;
}
public
static
void
main(String[] args) {
int
n =
7
;
int
m =
3
;
int
[][] edges = {{
1
,
2
}, {
1
,
3
}, {
1
,
4
}, {
2
,
5
}, {
2
,
6
}, {
4
,
7
}};
System.out.println(findMaxPrizes(n, m, edges));
}
}