import
java.io.*;
import
java.util.*;
class
GFG
{
static
void
addEdge(ArrayList<ArrayList<Integer>> adj,
int
u,
int
v)
{
adj.get(u).add(v);
adj.get(v).add(u);
}
static
void
printGraph(ArrayList<ArrayList<Integer>> adj,
int
V)
{
for
(
int
v =
0
; v < V; ++v)
{
System.out.print(
"\n Adjacency list of vertex "
+ v +
"\n head "
);
for
(
int
x : adj.get(v))
{
System.out.print(
"-> "
+ x);
}
System.out.println();
}
}
static
boolean
checkBusTopologyUtil(ArrayList<ArrayList<Integer>> adj,
int
V,
int
E)
{
if
(E != (V -
1
))
{
return
false
;
}
if
(V ==
1
)
{
return
true
;
}
int
[] vertexDegree =
new
int
[V +
1
];
for
(
int
i =
1
; i <= V; i++)
{
for
(
int
v : adj.get(i))
{
vertexDegree[v]++;
}
}
int
countDegree2 =
0
, countDegree1 =
0
;
for
(
int
i =
1
; i <= V; i++)
{
if
(vertexDegree[i] ==
2
)
{
countDegree2++;
}
else
if
(vertexDegree[i] ==
1
)
{
countDegree1++;
}
else
{
return
false
;
}
}
if
(countDegree1 ==
2
&& countDegree2 == (V -
2
))
{
return
true
;
}
return
false
;
}
static
void
checkBusTopology(ArrayList<ArrayList<Integer>> adj,
int
V,
int
E)
{
boolean
isBus = checkBusTopologyUtil(adj, V, E);
if
(isBus)
{
System.out.println(
"YES"
);
}
else
{
System.out.println(
"NO"
);
}
}
public
static
void
main (String[] args)
{
int
V =
5
, E =
4
;
ArrayList<ArrayList<Integer>> adj1=
new
ArrayList<ArrayList<Integer>>();
for
(
int
i =
0
; i < V +
1
; i++)
{
adj1.add(
new
ArrayList<Integer>());
}
addEdge(adj1,
1
,
2
);
addEdge(adj1,
1
,
3
);
addEdge(adj1,
3
,
4
);
addEdge(adj1,
4
,
5
);
checkBusTopology(adj1, V, E);
V =
4
;
E =
4
;
ArrayList<ArrayList<Integer>> adj2 =
new
ArrayList<ArrayList<Integer>>();
for
(
int
i =
0
; i < (V +
1
); i++)
{
adj2.add(
new
ArrayList<Integer>());
}
addEdge(adj2,
1
,
2
);
addEdge(adj2,
1
,
3
);
addEdge(adj2,
3
,
4
);
addEdge(adj2,
4
,
2
);
checkBusTopology(adj2, V, E);
}
}