You are given a tree (a simple connected graph with no cycles).You have
to remove as many edges from the tree as possible to obtain a forest with the condition that :
Each connected component of the forest contains even number of verticesYour task is to calculate the number of removed edges in such a forest.
Input:
The first line of input contains two integers N and M. N is the number of vertices and M is the number of edges. 2 <= N <= 100.
Next M lines contains two integers ui and vi which specifies an edge of the tree. (1-based index)
Output:
Print a single integer which is the answer
Sample Input
10 9
2 1
3 1
4 3
5 2
6 1
7 2
8 6
9 8
10 8
Sample Output :
2
import
java.util.*;
public
class
Solution{
public
static
void
main(String[] args){
Scanner in =
new
Scanner(System.in);
int
N = in.nextInt();
int
M = in.nextInt();
Integer[][] edges =
new
Integer[M][
2
];
for
(
int
i=
0
;i<M;i++){
edges[i][
0
] = in.nextInt();
edges[i][
1
] = in.nextInt();
if
(edges[i][
0
]>edges[i][
1
]){
int
tmp = edges[i][
0
];
edges[i][
0
] = edges[i][
1
];
edges[i][
1
] = tmp;
}
}
Arrays.sort(edges,
new
Comparator<Integer[]>(){
@Override
public
int
compare(Integer[] int1, Integer[] int2){
Integer v1 = int1[
0
];
Integer v2 = int2[
0
];
return
v1.compareTo(v2);
}
});
int
[] count =
new
int
[N];
count[
0
] = N;
for
(
int
i=
1
;i<N;i++){
ArrayList<Integer> a =
new
ArrayList<Integer>();
a.add(i+
1
);
int
j =
0
;
while
(j<a.size()){
for
(
int
m=j;m<M;m++){
if
(edges[m][
0
]==a.get(j)){
if
(!a.contains(edges[m][
1
])){
a.add(edges[m][
1
]);
}
}
}
j++;
}
count[i] = a.size();
}
int
remove =
0
;
for
(
int
c:count){
if
(c%
2
==
0
)
remove++;
}
System.out.println(remove-
1
);
}
}
No comments:
Post a Comment