Skip to content

Instantly share code, notes, and snippets.

@binhngoc17
Created November 23, 2014 09:55
Show Gist options
  • Save binhngoc17/48ef5b7c14dde85a12c7 to your computer and use it in GitHub Desktop.
Save binhngoc17/48ef5b7c14dde85a12c7 to your computer and use it in GitHub Desktop.
Break the tree into forest of event trees
import fileinput
inputs = fileinput.input()
input_vals = []
for n in inputs:
input_vals.append(n.replace('\n', ''))
numVertices, numEdges = [int(k) for k in input_vals[0].split(' ')]
edges = []
for i in range(numEdges):
edges.append(tuple([int(k) for k in input_vals[i+1].split(' ')]))
def find_node_group(i, edges, removedEdge):
count = 1
stack = [i]
while stack:
item = stack.pop()
for edge in edges:
if edge in removedEdge:
continue
if edge[0] == item:
stack.append(edge[1])
removedEdge.add(edge)
count += 1
elif edge[1] == item:
stack.append(edge[0])
removedEdge.add(edge)
count += 1
return count
countEdges = 0
for edge in edges:
group1NodesCount = find_node_group(edge[0], edges, set(tuple([edge])))
group2NodesCount = find_node_group(edge[1], edges, set(tuple([edge])))
if group2NodesCount % 2 == 0 and group1NodesCount % 2 == 0:
countEdges += 1
print countEdges
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment