import
java.util.ArrayList;
import
java.util.Arrays;
import
java.util.List;
public
class
StarTopologyChecker {
static
void
addEdge(List<Integer>[] adj,
int
u,
int
v) {
adj[u].add(v);
adj[v].add(u);
}
static
void
printGraph(List<Integer>[] adj,
int
V) {
for
(
int
v =
0
; v < V; ++v) {
System.out.print(
"Adjacency list of vertex "
+ v +
"\n head "
);
for
(
int
x : adj[v]) {
System.out.print(
"-> "
+ x +
" "
);
}
System.out.println();
}
}
static
boolean
DFS(
int
node, List<Integer>[] adj,
boolean
[] visited,
int
[] degree,
int
V) {
visited[node] =
true
;
degree[node] = adj[node].size();
for
(
int
v : adj[node]) {
if
(!visited[v]) {
DFS(v, adj, visited, degree, V);
}
}
if
(node !=
0
&& degree[node] !=
1
&& degree[node] != V-
1
) {
return
false
;
}
if
(node ==
0
&& degree[node] != V-
1
) {
return
false
;
}
return
true
;
}
static
void
checkStarTopology(List<Integer>[] adj,
int
V,
int
E) {
boolean
[] visited =
new
boolean
[V];
int
[] degree =
new
int
[V];
boolean
isStar = DFS(
0
, adj, visited, degree, V);
if
(isStar) {
System.out.println(
"YES"
);
}
else
{
System.out.println(
"NO"
);
}
}
public
static
void
main(String[] args) {
int
V =
5
, E =
4
;
List<Integer>[] adj1 =
new
ArrayList[V];
for
(
int
i =
0
; i < V; i++) {
adj1[i] =
new
ArrayList<>();
}
addEdge(adj1,
0
,
1
);
addEdge(adj1,
0
,
2
);
addEdge(adj1,
0
,
3
);
addEdge(adj1,
0
,
4
);
checkStarTopology(adj1, V, E);
V =
4
; E =
4
;
List<Integer>[] adj2 =
new
ArrayList[V];
for
(
int
i =
0
; i < V; i++) {
adj2[i] =
new
ArrayList<>();
}
addEdge(adj2,
0
,
1
);
addEdge(adj2,
0
,
2
);
addEdge(adj2,
2
,
3
);
addEdge(adj2,
3
,
1
);
checkStarTopology(adj2, V, E);
}
}