def calcPathLen ( initNode , lastNode ) :
pathWeight = 0
if initNode == lastNode :
return 0
else :
for nextNodeOption, edgeNum in treeMapDict[ initNode] :
return edgeDict[ edgeNum] [ -1 ] + calcPathLen( nextNodeOption, lastNode)
################## calcPathLen end ######################################
def updateIthWeight ( edgeToUpdate, newWeight) :
edgeDict[ edgeToUpdate] [ -1 ] = newWeight
################## updateIthWeight end ######################################
def getNodesData ( num) :
for i in range ( 1 , int ( num) ) :
data = raw_input ( )
dataLst = data.split ( )
edgeDict[ i] = [ ( int ( dataLst[ 0 ] ) , int ( dataLst[ 1 ] ) ) , int ( dataLst[ 2 ] ) ]
if int ( dataLst[ 0 ] ) in treeMapDict :
treeMapDict[ int ( dataLst[ 0 ] ) ] .append ( ( int ( dataLst[ 1 ] ) , i) )
else :
treeMapDict[ int ( dataLst[ 0 ] ) ] = [ ( int ( dataLst[ 1 ] ) , i) ]
################## getNodesData end ######################################
def getQueriesData ( queriesNum) :
for i in range ( 0 , int ( queriesNum) ) :
qLst.append ( raw_input ( ) )
################## getQueriesData end ######################################
###################
## get nodes data
###################
edgeDict = dict ( )
treeMapDict = dict ( )
numOfNodes = raw_input ( )
getNodesData( numOfNodes)
###################
##get queries data
###################
qLst = [ ]
queriesNum = raw_input ( )
getQueriesData( queriesNum)
###################
# run queries
###################
for q in qLst:
querySpltLst = q.split ( )
if querySpltLst[ 0 ] == '1' :
edgeToUpdate = int ( querySpltLst[ 1 ] )
newWeight = int ( querySpltLst[ 2 ] )
updateIthWeight( edgeToUpdate, newWeight)
elif querySpltLst[ 0 ] == '2' :
initNode = int ( querySpltLst[ 1 ] )
lastNode = int ( querySpltLst[ 2 ] )
print calcPathLen( initNode, lastNode)
ZGVmIGNhbGNQYXRoTGVuICggaW5pdE5vZGUgLCBsYXN0Tm9kZSApIDoKICAgIHBhdGhXZWlnaHQgPSAwCiAgICBpZiBpbml0Tm9kZSA9PSBsYXN0Tm9kZSA6CiAgICAgICAgcmV0dXJuIDAKICAgIGVsc2UgOgogICAgICAgIGZvciBuZXh0Tm9kZU9wdGlvbiwgZWRnZU51bSBpbiB0cmVlTWFwRGljdFtpbml0Tm9kZV0gOgogICAgICAgICAgICByZXR1cm4gZWRnZURpY3RbZWRnZU51bV1bLTFdICsgY2FsY1BhdGhMZW4obmV4dE5vZGVPcHRpb24sbGFzdE5vZGUpCiAgICAKIyMjIyMjIyMjIyMjIyMjIyMjIGNhbGNQYXRoTGVuIGVuZCAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKICAgICAgICAKZGVmIHVwZGF0ZUl0aFdlaWdodCAoIGVkZ2VUb1VwZGF0ZSwgbmV3V2VpZ2h0KSA6CiAgICBlZGdlRGljdFtlZGdlVG9VcGRhdGVdWy0xXSA9IG5ld1dlaWdodAoKIyMjIyMjIyMjIyMjIyMjIyMjIHVwZGF0ZUl0aFdlaWdodCBlbmQgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCmRlZiBnZXROb2Rlc0RhdGEgKG51bSkgOgogICAgZm9yIGkgaW4gcmFuZ2UoMSxpbnQobnVtKSkgOgogICAgICAgIGRhdGEgPSByYXdfaW5wdXQoKQogICAgICAgIGRhdGFMc3QgPSBkYXRhLnNwbGl0KCkKICAgICAgICBlZGdlRGljdFtpXSA9IFsoaW50KGRhdGFMc3RbMF0pLGludChkYXRhTHN0WzFdKSksaW50KGRhdGFMc3RbMl0pXQogICAgICAgIGlmIGludChkYXRhTHN0WzBdKSBpbiB0cmVlTWFwRGljdCA6CiAgICAgICAgICAgIHRyZWVNYXBEaWN0W2ludChkYXRhTHN0WzBdKV0uYXBwZW5kKChpbnQoZGF0YUxzdFsxXSksaSkpCiAgICAgICAgZWxzZToKICAgICAgICAgICAgdHJlZU1hcERpY3RbaW50KGRhdGFMc3RbMF0pXSA9IFsoaW50KGRhdGFMc3RbMV0pLGkpXQogCiMjIyMjIyMjIyMjIyMjIyMjIyBnZXROb2Rlc0RhdGEgZW5kICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgpkZWYgZ2V0UXVlcmllc0RhdGEgKHF1ZXJpZXNOdW0pIDoKICAgIGZvciBpIGluIHJhbmdlKDAsaW50KHF1ZXJpZXNOdW0pKSA6CiAgICAgICAgcUxzdC5hcHBlbmQocmF3X2lucHV0KCkpCiAgICAKIyMjIyMjIyMjIyMjIyMjIyMjIGdldFF1ZXJpZXNEYXRhIGVuZCAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKIyMjIyMjIyMjIyMjIyMjIyMjIwojIyBnZXQgbm9kZXMgZGF0YQojIyMjIyMjIyMjIyMjIyMjIyMjCmVkZ2VEaWN0ID0gZGljdCgpCnRyZWVNYXBEaWN0ID0gZGljdCgpICAgICAgICAgICAgICAgCm51bU9mTm9kZXMgPSByYXdfaW5wdXQoKQpnZXROb2Rlc0RhdGEobnVtT2ZOb2RlcykKCiMjIyMjIyMjIyMjIyMjIyMjIyMKIyNnZXQgcXVlcmllcyBkYXRhCiMjIyMjIyMjIyMjIyMjIyMjIyMKcUxzdCA9IFtdCnF1ZXJpZXNOdW0gPSByYXdfaW5wdXQoKQpnZXRRdWVyaWVzRGF0YShxdWVyaWVzTnVtKQoKIyMjIyMjIyMjIyMjIyMjIyMjIwojIHJ1biBxdWVyaWVzCiMjIyMjIyMjIyMjIyMjIyMjIyMKCmZvciBxIGluIHFMc3Q6CiAgICBxdWVyeVNwbHRMc3QgPSBxLnNwbGl0KCkKICAgIGlmIHF1ZXJ5U3BsdExzdFswXSA9PSAnMScgOgogICAgICAgIGVkZ2VUb1VwZGF0ZSA9IGludChxdWVyeVNwbHRMc3RbMV0pCiAgICAgICAgbmV3V2VpZ2h0ID0gaW50KHF1ZXJ5U3BsdExzdFsyXSkKICAgICAgICB1cGRhdGVJdGhXZWlnaHQoZWRnZVRvVXBkYXRlLG5ld1dlaWdodCkKICAgIGVsaWYgcXVlcnlTcGx0THN0WzBdID09ICcyJyA6CiAgICAgICAgaW5pdE5vZGUgPSBpbnQocXVlcnlTcGx0THN0WzFdKQogICAgICAgIGxhc3ROb2RlID0gaW50KHF1ZXJ5U3BsdExzdFsyXSkKICAgICAgICBwcmludCBjYWxjUGF0aExlbihpbml0Tm9kZSxsYXN0Tm9kZSkK