import
java.util.ArrayList;
public
class
MinimumVertexCover {
static
void
dfs(ArrayList<Integer>[] adj,
int
src,
int
par, ArrayList<
int
[]> val)
{
for
(
int
v : adj[src])
if
(v != par)
dfs(adj, v, src, val);
for
(
int
v : adj[src]) {
if
(v != par) {
val.get(src)[
0
] += val.get(v)[
1
];
val.get(src)[
1
] += Math.min(val.get(v)[
1
],
val.get(v)[
0
]);
}
}
}
static
int
countVertex(
int
N,
int
[][] edges)
{
ArrayList<Integer>[] adj =
new
ArrayList[N +
1
];
for
(
int
i =
1
; i <= N; i++) {
adj[i] =
new
ArrayList<>();
}
for
(
int
[] edge : edges) {
adj[edge[
0
]].add(edge[
1
]);
adj[edge[
1
]].add(edge[
0
]);
}
ArrayList<
int
[]> val =
new
ArrayList<>();
for
(
int
i =
0
; i <= N; i++) {
int
[] x = {
0
,
1
};
val.add(x);
}
dfs(adj,
1
,
1
, val);
return
Math.min(val.get(
1
)[
0
], val.get(
1
)[
1
]);
}
public
static
void
main(String[] args)
{
int
[][] edges = {
{
1
,
2
}, {
1
,
3
}, {
2
,
4
}, {
3
,
5
}, {
3
,
6
}
};
int
N =
6
;
int
result = countVertex(N, edges);
System.out.println(result);
}
}