1. 程式人生 > >[GDOI2016][樹鏈剖分+主席樹]瘋狂動物城

[GDOI2016][樹鏈剖分+主席樹]瘋狂動物城

題面:

Description

Nick 是隻在動物城以坑蒙拐騙為生的狐狸,兒時受到偏見的傷害,放棄了自己的理想。他被兔子 Judy 設下圈套,被迫與她合作查案,而捲入意想不到的陰謀,歷盡艱險後成為搭檔。他們識破了綿羊副市長 Bellwether 的計劃,發現是 Bellwether 陷害食肉動物,用毒藥讓食肉動物發狂。Bellwether 被抓到了監獄裡面, Nick 和 Judy 過上了一段平靜的日子。

然而,故事並沒有這樣結束,之前在車管所幫他們查車牌號的憨厚的樹懶 Flash,才是陷害食肉動物事件的幕後主使。Flash 批量製作了大量讓食肉動物發狂的藥劑,投放到了食肉動物群中。現在,大量的食肉動物被感染,動物城陷入了一片混亂。警察局的牛局長 Bogo 找到了 Nick,希望他能幫忙。幸運的是,動物城聯邦安全域性非常有先見之明,他們在每個州都祕密放置了一臺機器,機器能生產能量石,這些能量石能讓食肉動物恢復正常。現在 Nick 和 Judy 需要去啟動這些機器。

動物城是一個有N個州的聯邦,該聯邦是一個樹的形狀,即N個州共有N1條雙向道路連線它們,且N個州是相互連通的。N個州的編號依次為1,2,3,,N。每個州都有且僅有一臺機器。一臺機器啟動後的下一個時刻,就會開始生產能量石, 每個單位時間生產一個。能量石從被生產的時刻開始即生效,每一個單位時間能救一定數量的食肉動物。每個州的解毒機器製造出的能量石的品種可能是不同,第i個州的機器生產的能量石每個單位時間能救ai只食肉動物。

Nick 和 Judy 剩下的時間不多了,他們決定分工合作。 Nick 從X州出發,目的地為Y 州,路徑為XY的最短路徑。 Nick 從

X州出發的時刻為0,每隔一個單位時間移動一個州。每到一個州, Nick 就會啟動這個州的機器。 Nick 想知道他從X州出發到達Y州的這段時間裡,一共有多少食肉動物被拯救。 Nick 在糾結他的路線選擇,因此,他會給你若干的詢問,希望比他更聰明的你能幫助他。

在他給你詢問的過程中,動物城的局勢也在發生著一些變化。動物城聯邦安全域性可以執行一個修改操作"X,Y,delta",會對X州到Y州的最短路徑上的州(包括X,Y州)的機器進行升級,這樣,這些機器生產出來的能量石,每個單位時間能救的食肉動物的數量會增加delta。樹懶 Flash 當然也不會坐以待斃,他有一臺監控儀,會監控每個州的機器的情況,每當有機器被升級,監控儀就會儲存下當前所有州的機器的屬性

ai。 Flash可以用一種神祕的武器執行一個讀取操作"X",把當前各個州的機器恢復到第X次儲存的狀態($X=0表示未進行過升級時的初始狀態)。注意, 只有修改操作執行的時後會進行儲存。

現在,依次給出M個操作,若該操作為一個詢問,請你輸出 Nick 在當前局面下,他從 X州出發到達Y州的這段時間裡,一共有多少食肉動物被拯救,由於這個答案可能很大,你只需要輸出答案模20160501後的值。請注意,M個操作都是被加密過的。

Input

第一行 2 個整數N,M表示節點個數和操作次數。

接下來N1每行2個整數Ui,Vi表示了這棵樹中UiVi2個州間有邊相連。

接下來一行N個整數, 表示這N個州的機器製造的能量的初始值。

接下來M行每行先有一個數字表示了操作的型別:

型別1,代表一個修改操作,接下來有3個整數X1,Y1,delta,X1,Y1是加密後的數字。正確的X=X1xorlastans,Y=Y1xorlastanslastans為上次輸出的的答案,如果之前沒有輸出過那麼當成0

型別 2,代表一個詢問操作,接下來有2個整數X1,Y1, 和修改操作一樣,正確的