using
System;
using
System.Collections.Generic;
class
GFG
{
static
List<List<
int
>> g =
new
List<List<
int
>>();
static
int
res;
static
int
dfs(
int
u,
bool
[]visit)
{
visit[u] =
true
;
int
currComponentNode = 0;
for
(
int
i = 0; i < g[u].Count; i++)
{
int
v = g[u][i];
if
(!visit[v])
{
int
subtreeNodeCount = dfs(v, visit);
if
(subtreeNodeCount % 2 == 0)
res++;
else
currComponentNode += subtreeNodeCount;
}
}
return
(currComponentNode + 1);
}
static
int
maxEdgeRemovalToMakeForestEven(
int
N)
{
bool
[]visit =
new
bool
[N + 1];
for
(
int
i = 0; i <= N; i++)
visit[i] =
false
;
res = 0;
dfs(0, visit);
return
res;
}
static
void
addEdge(
int
u,
int
v)
{
g[u].Add(v);
g[v].Add(u);
}
public
static
void
Main(String []args)
{
int
[,]edges = {{0, 2}, {0, 1}, {0, 4},
{2, 3}, {4, 5}, {5, 6},
{5, 7}};
int
N = edges.GetLength(0);
for
(
int
i = 0; i < N + 1; i++)
g.Add(
new
List<
int
>());
for
(
int
i = 0; i < N; i++)
addEdge(edges[i, 0], edges[i, 1]);
Console.WriteLine(maxEdgeRemovalToMakeForestEven(N));
}
}