Skip to content

Instantly share code, notes, and snippets.

@paudirac
Last active August 2, 2016 22:29
Show Gist options
  • Save paudirac/cd934024c34cde313a23489159ff2299 to your computer and use it in GitHub Desktop.
Save paudirac/cd934024c34cde313a23489159ff2299 to your computer and use it in GitHub Desktop.
import sys
def read(): return raw_input()
def selected_employees():
return (read(), read())
def read_relation():
manager, managed = read().split()
return managed, manager
def read_relations(count):
d = {}
while True:
try:
m,s = read_relation()
if not d.has_key(s):
d[s] = None
d[m] = s
except:
return d
def cons(a, l):
aux = [a]
aux.extend(l)
return aux
def walk_managers(a, relations):
if a is None:
return []
else:
return cons(a, walk_managers(relations[a], relations))
def rev(l):
l.reverse()
return l
def last(l):
return l[-1]
def common_manager(a,b,relations):
managers_a = walk_managers(a, relations)
managers_b = walk_managers(b, relations)
top_to_a = rev(managers_a)
top_to_b = rev(managers_b)
commons = zip(top_to_a, top_to_b)
return last([a for a,b in zip(top_to_a, top_to_b) if a == b])
def process_common_manager(count):
s1, s2 = selected_employees()
relations = read_relations(count)
return common_manager(s1, s2, relations)
def OutputCommonManager(count):
common = process_common_manager(count)
sys.stdout.write(common)
_count = int(raw_input())
OutputCommonManager(_count)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment