<prompt> Unapewa mti wenye nodi za n zilizohesabiwa kutoka 0 hadi n - 1 katika umbo la safu ya mzazi mzazi ambapo mzazii ndiye mzazi wa kifundo cha ith. Mzizi wa mti ni nodi 0, kwa hivyo mzazi0 -1 kwa kuwa hauna mzazi. Unataka kubuni muundo wa data unaoruhusu watumiaji kufunga, kufungua, na kuboresha nodi kwenye mti.Muundo wa data unapaswa kusaidia kazi zifuatazo: Funga: Hufunga nodi iliyotolewa kwa mtumiaji aliyepewa na huzuia watumiaji wengine kufunga nodi sawa. Unaweza tu kufunga nodi kwa kutumia chaguo hili la kukokotoa ikiwa nodi imefunguliwa. Fungua: Hufungua nodi iliyotolewa kwa mtumiaji aliyepewa. Unaweza tu kufungua nodi kwa kutumia chaguo hili la kukokotoa ikiwa kwa sasa imefungwa na mtumiaji yuleyule. Boresha: Hufunga nodi iliyotolewa kwa mtumiaji aliyepewa na kufungua vizazi vyake vyote bila kujali ni nani aliyeifunga. Unaweza tu kuboresha nodi ikiwa masharti yote 3 ni kweli: Nodi imefunguliwa, Ina angalau kizazi kimoja kilichofungwa na mtumiaji yeyote , na Haina mababu yoyote waliofungiwa.Tekeleza darasa la LockingTree: LockingTreeint parent huanzisha muundo wa data kwa safu kuu. lockint num, int user hurejesha true ikiwa inawezekana kwa mtumiaji aliye na kitambulisho mtumiaji kufunga nodi num, au false vinginevyo. Ikiwezekana, nodi num itafungwa imefungwa na mtumiaji mwenye kitambulisho mtumiaji. funguaint num, int user hurejesha true ikiwa inawezekana kwa mtumiaji aliye na kitambulisho mtumiaji kufungua nodi num, au false vinginevyo. Ikiwezekana, nodi num itakuwa imefunguliwa. upgradeint num, int user hurejesha true ikiwezekana kwa mtumiaji aliye na kitambulisho mtumiaji kuboresha nodi num, au false vinginevyo. Ikiwezekana, nodi num itasasishwa imeboreshwa.Mfano wa 1:Ingizo LockingTree , lock , fungua , fungua , lock, pandisha gredi , funga -1, 0, 0, 1, 1, 2, 2, 2, 2, 2, 3, 2, 2, 4, 5, 0, 1, 0, 1Patonull, kweli, uongo, kweli, kweli, kweli, uongoUfafanuziLockingTree lockingTree LockingTree mpya-1, 0, 0, 1, 1, 2, 2;lockingTree.lock2, 2; rudi kweli kwa sababu nodi 2 imefunguliwa. Node 2 sasa itafungwa na mtumiaji 2.lockingTree.fungua2, 3; rudisha uwongo kwa sababu mtumiaji 3 hawezi kufungua nodi iliyofungwa na mtumiaji 2.lockingTree.fungua2, 2; rudi kweli kwa sababu nodi 2 ilikuwa imefungwa hapo awali na mtumiaji 2. Node 2 sasa itafunguliwa.lockingTree.lock4, 5; rudi kweli kwa sababu nodi 4 imefunguliwa. Node 4 sasa itafungwa na mtumiaji 5.lockingTree.upgrade0, 1; rudi kweli kwa sababu nodi 0 imefunguliwa na ina angalau kizazi kimoja kilichofungwa nodi 4. Nodi 0 sasa itafungwa na mtumiaji 1 na nodi 4 sasa itafunguliwa.lockingTree.lock0, 1; rudisha uwongo kwa sababu nodi 0 tayari imefungwa.Vikwazo: n parent.length 2 n 2000 0 mzazii n - 1 kwa i ! 0 mzazi0 -1 0 nambari n - 1 1 mtumiaji 104 mzazi inawakilisha mti halali. Simu zisizozidi 2000 kwa jumla zitapigwa kufunga, fungua na kuboresha.  <response>: def subset_xor_sumnambari: matokeo 0 n lenzi nambari num_subsets 1 n kwa i in rangenum_subsets: sehemu ndogo_xor 0 kwa j katika safun: ikiwa mimi na 1 j: subset_xor numsj tokeo subset_xor matokeo ya kurudi 