In [74]:
class Node:
node_number = None
neigbour = []
is_visited = False
def __init__(self, _node_number):
self.node_number = _node_number
self.neigbour = []
self.is_visited = False
In [75]:
node_dict = {}
non_visited_dict = {}
In [76]:
def has_cycle(current_node, parent_node):
current_node.is_visited = True
non_visited_dict[current_node] = '1'
for i in range(0, len(current_node.neigbour)):
neigh_node = current_node.neigbour[i]
if (neigh_node.is_visited == False):
if (has_cycle(neigh_node, current_node)):
return True
elif (parent_node is not None and neigh_node.node_number != parent_node.node_number):
return True
elif (parent_node is None and neigh_node.node_number == current_node.node_number):
return True
return False
In [77]:
graph_property = map(int, raw_input().split())
no_nodes = graph_property[0]
no_edges = graph_property[1]
for i in range(0, no_nodes):
number = i + 1
node = Node(number)
node_dict[number] = node
first_node = None
if (no_edges == 0 and no_nodes == 1):
print "YES"
if (no_edges == 0 and no_nodes > 1):
print "NO"
elif (no_nodes != no_edges +1):
print "NO"
else:
for i in range(0, no_edges):
neighbour_arr = map(int, raw_input().split())
a = neighbour_arr[0]
b = neighbour_arr[1]
node_a = node_dict[a]
node_b = node_dict[b]
if first_node is None:
first_node = node_a
node_a.neigbour.append(node_b)
node_b.neigbour.append(node_a)
has_cycle = has_cycle(first_node, None)
if has_cycle or len(non_visited_dict.keys()) != no_nodes:
print "NO"
else:
print "YES"
In [ ]:
In [ ]: