Last active
August 2, 2016 22:29
-
-
Save paudirac/cd934024c34cde313a23489159ff2299 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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