import
java.util.ArrayList;
import
java.util.Vector;
public
class
GoodComponents {
static
void
dfs(
int
v,
int
[] vertices,
int
[] edges,
ArrayList<ArrayList<Integer> > adj,
int
[] visited)
{
visited[v] =
1
;
vertices[
0
]++;
edges[
0
] += adj.get(v).size();
for
(
int
to : adj.get(v)) {
if
(visited[to] ==
0
) {
dfs(to, vertices, edges, adj, visited);
}
}
}
static
int
findNumberOfGoodComponent(
int
V, ArrayList<ArrayList<Integer> > adj)
{
int
ans =
0
;
int
[] visited =
new
int
[V +
1
];
for
(
int
i =
1
; i <= V; i++) {
if
(visited[i] ==
0
) {
int
[] vertices = {
0
};
int
[] edges = {
0
};
dfs(i, vertices, edges, adj, visited);
edges[
0
] /=
2
;
if
(edges[
0
]
== (vertices[
0
] * (vertices[
0
] -
1
))
/
2
)
ans++;
}
}
return
ans;
}
public
static
void
main(String[] args)
{
int
V =
7
;
ArrayList<ArrayList<Integer> > adj
=
new
ArrayList<>(V +
1
);
for
(
int
i =
0
; i <= V; i++) {
adj.add(
new
ArrayList<Integer>());
}
adj.get(
1
).add(
2
);
adj.get(
7
).add(
2
);
adj.get(
3
).add(
5
);
adj.get(
3
).add(
4
);
adj.get(
4
).add(
5
);
int
numberOfGoodComponents
= findNumberOfGoodComponent(V, adj);
System.out.println(
"Number of 'good' components: "
+ numberOfGoodComponents);
}
}