nodes={0:[1,2,3,4,5,6],6:[7],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
bm9kZXM9ezA6WzEsMiwzLDQsNSw2XSw2Ols3XSw3Ols4XX0KUEI9e30KTkI9e30KZGVmIGJlbG93KGkpOgogICAgaWYgaSBub3QgaW4gbm9kZXM6CiAgICAgICAgUEJbaV09MAogICAgICAgIE5CW2ldPTEKICAgICAgICByZXR1cm4gMCwxCiAgICB0b3Rfbm9kZXNfYmVsb3c9MAogICAgdG90X3BhdGhzX2JlbG93PTAKICAgIGZvciBub2RlIGluIG5vZGVzW2ldOgogICAgICAgIHBhdGhzX2JlbG93LG5vZGVzX2JlbG93PWJlbG93KG5vZGUpCiAgICAgICAgdG90X25vZGVzX2JlbG93Kz1ub2Rlc19iZWxvdwogICAgICAgIHRvdF9wYXRoc19iZWxvdys9cGF0aHNfYmVsb3cKICAgIHRvdF9wYXRoc19iZWxvdys9dG90X25vZGVzX2JlbG93CiAgICB0b3Rfbm9kZXNfYmVsb3crPTEKICAgIFBCW2ldPXRvdF9wYXRoc19iZWxvdwogICAgTkJbaV09dG90X25vZGVzX2JlbG93CiAgICByZXR1cm4gdG90X3BhdGhzX2JlbG93LHRvdF9ub2Rlc19iZWxvdwoKUD17MDpiZWxvdygwKVswXX0KZGVmIGZpbGxfUChpKToKICAgIGZvciBub2RlIGluIG5vZGVzW2ldOgogICAgICAgIFBbbm9kZV09UFtpXSs5LTIqTkJbbm9kZV0gIzcgaXMgdGhlIG51bWJlciBvZiBub2RlcwogICAgICAgIGlmIG5vZGUgaW4gbm9kZXM6CiAgICAgICAgICAgIGZpbGxfUChub2RlKQpmaWxsX1AoMCkKCl9taW49bWluKFAudmFsdWVzKCkpCmFuc3dlcnM9W2sgZm9yIGsgaW4gUCBpZiBQW2tdPT1fbWluXQpwcmludCBhbnN3ZXJz