nodes={0:[1],1:[2],2:[3],3:[4,5,6,7,8]}
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]+9-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
bm9kZXM9ezA6WzFdLDE6WzJdLDI6WzNdLDM6WzQsNSw2LDcsOF19ClBCPXt9Ck5CPXt9CmRlZiBiZWxvdyhpKToKICAgIGlmIGkgbm90IGluIG5vZGVzOgogICAgICAgIFBCW2ldPTAKICAgICAgICBOQltpXT0xCiAgICAgICAgcmV0dXJuIDAsMQogICAgdG90X25vZGVzX2JlbG93PTAKICAgIHRvdF9wYXRoc19iZWxvdz0wCiAgICBmb3Igbm9kZSBpbiBub2Rlc1tpXToKICAgICAgICBwYXRoc19iZWxvdyxub2Rlc19iZWxvdz1iZWxvdyhub2RlKQogICAgICAgIHRvdF9ub2Rlc19iZWxvdys9bm9kZXNfYmVsb3cKICAgICAgICB0b3RfcGF0aHNfYmVsb3crPXBhdGhzX2JlbG93CiAgICB0b3RfcGF0aHNfYmVsb3crPXRvdF9ub2Rlc19iZWxvdwogICAgdG90X25vZGVzX2JlbG93Kz0xCiAgICBQQltpXT10b3RfcGF0aHNfYmVsb3cKICAgIE5CW2ldPXRvdF9ub2Rlc19iZWxvdwogICAgcmV0dXJuIHRvdF9wYXRoc19iZWxvdyx0b3Rfbm9kZXNfYmVsb3cKClA9ezA6YmVsb3coMClbMF19CmRlZiBmaWxsX1AoaSk6CiAgICBmb3Igbm9kZSBpbiBub2Rlc1tpXToKICAgICAgICBQW25vZGVdPVBbaV0rOS0yKk5CW25vZGVdICM3IGlzIHRoZSBudW1iZXIgb2Ygbm9kZXMKICAgICAgICBpZiBub2RlIGluIG5vZGVzOgogICAgICAgICAgICBmaWxsX1Aobm9kZSkKZmlsbF9QKDApCgpfbWluPW1pbihQLnZhbHVlcygpKQphbnN3ZXJzPVtrIGZvciBrIGluIFAgaWYgUFtrXT09X21pbl0KcHJpbnQgYW5zd2Vycw==