nodes={0:[1,2,3],1:[4,5],2:[6]}
PB={}
NB={}
def below(i):
if i not in nodes:
PB[i]=0
NB[i]=1
return 0,1
tot_nodes_below=0
tot_paths_below=0
for node in nodes[i]:
paths_below,nodes_below=below(node)
tot_nodes_below+=nodes_below
tot_paths_below+=paths_below
tot_paths_below+=tot_nodes_below
tot_nodes_below+=1
PB[i]=tot_paths_below
NB[i]=tot_nodes_below
return tot_paths_below,tot_nodes_below
P={0:below(0)[0]}
def fill_P(i):
for node in nodes[i]:
P[node]=P[i]+7-2*NB[node] #7 is the number of nodes
if node in nodes:
fill_P(node)
fill_P(0)
_min=min(P.values())
answers=[k for k in P if P[k]==_min]
print answers
bm9kZXM9ezA6WzEsMiwzXSwxOls0LDVdLDI6WzZdfQpQQj17fQpOQj17fQpkZWYgYmVsb3coaSk6CiAgICBpZiBpIG5vdCBpbiBub2RlczoKICAgICAgICBQQltpXT0wCiAgICAgICAgTkJbaV09MQogICAgICAgIHJldHVybiAwLDEKICAgIHRvdF9ub2Rlc19iZWxvdz0wCiAgICB0b3RfcGF0aHNfYmVsb3c9MAogICAgZm9yIG5vZGUgaW4gbm9kZXNbaV06CiAgICAgICAgcGF0aHNfYmVsb3csbm9kZXNfYmVsb3c9YmVsb3cobm9kZSkKICAgICAgICB0b3Rfbm9kZXNfYmVsb3crPW5vZGVzX2JlbG93CiAgICAgICAgdG90X3BhdGhzX2JlbG93Kz1wYXRoc19iZWxvdwogICAgdG90X3BhdGhzX2JlbG93Kz10b3Rfbm9kZXNfYmVsb3cKICAgIHRvdF9ub2Rlc19iZWxvdys9MQogICAgUEJbaV09dG90X3BhdGhzX2JlbG93CiAgICBOQltpXT10b3Rfbm9kZXNfYmVsb3cKICAgIHJldHVybiB0b3RfcGF0aHNfYmVsb3csdG90X25vZGVzX2JlbG93CgpQPXswOmJlbG93KDApWzBdfQpkZWYgZmlsbF9QKGkpOgogICAgZm9yIG5vZGUgaW4gbm9kZXNbaV06CiAgICAgICAgUFtub2RlXT1QW2ldKzctMipOQltub2RlXSAjNyBpcyB0aGUgbnVtYmVyIG9mIG5vZGVzCiAgICAgICAgaWYgbm9kZSBpbiBub2RlczoKICAgICAgICAgICAgZmlsbF9QKG5vZGUpCmZpbGxfUCgwKQoKX21pbj1taW4oUC52YWx1ZXMoKSkKYW5zd2Vycz1bayBmb3IgayBpbiBQIGlmIFBba109PV9taW5dCnByaW50IGFuc3dlcnM=