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