月下“毛景树”
Description
毛毛蟲經過及時的變形,最終逃過的一劫,離開了菜媽的菜園。 毛毛蟲經過千山萬水,歷盡千辛萬苦,最后來到了小小的紹興一中的校園里。爬啊爬~爬啊爬~~毛毛蟲爬到了一顆小小的“毛景樹”下面,發現樹上長著他最愛吃的毛毛果~~~ “毛景樹”上有N個節點和N-1條樹枝,但節點上是沒有毛毛果的,毛毛果都是長在樹枝上的。但是這棵“毛景樹”有著神奇的魔力,他能改變樹枝上毛毛果的個數: ? Change k w:將第k條樹枝上毛毛果的個數改變為w個。 ? Cover u v w:將節點u與節點v之間的樹枝上毛毛果的個數都改變為w個。 ? Add u v w:將節點u與節點v之間的樹枝上毛毛果的個數都增加w個。 由于毛毛蟲很貪,于是他會有如下詢問: ? Max u v:詢問節點u與節點v之間樹枝上毛毛果個數最多有多少個。
Input
第一行一個正整數N。 接下來N-1行,每行三個正整數Ui,Vi和Wi,第i+1行描述第i條樹枝。表示第i條樹枝連接節點Ui和節點Vi,樹枝上有Wi個毛毛果。 接下來是操作和詢問,以“Stop”結束。
Output
對于毛毛蟲的每個詢問操作,輸出一個答案。
Sample Input
4
1 2 8
1 3 7
3 4 9
Max 2 4
Cover 2 4 5
Add 1 4 10
Change 1 16
Max 2 4
Stop
Sample Output
9
16
【Data Range】
1<=N<=100,000,操作+詢問數目不超過100,000。
保證在任意時刻,所有樹枝上毛毛果的個數都不會超過10^9個。 題面
解題思路:邊權化點權,將邊權放到深度較深的點上面
對于操作:
Change k w:將第k條樹枝上毛毛果的個數改變為w個。
=>直接找對應的點,線段樹上單點修改
Cover u v w:將節點u與節點v之間的樹枝上毛毛果的個數都改變為w個。
=>注意:u和v的lca是不應該被修改的
為了方便,我們可以先修改,再把lca改回去
Add u v w:將節點u與節點v之間的樹枝上毛毛果的個數都增加w個。
=>注意:u和v的lca是不應該被加的
為了方便,我們可以先修改,再把lca減回去
Max u v:詢問節點u與節點v之間樹枝上毛毛果個數最多有多少個。
=>注意:u和v的lca是不應該被算進去的
我們可以先將lca賦成極小值
得到答案后在將原值賦回去
值得注意的地方是線段樹的標記下放:
先修改操作,后加操作,保證正確性
轉載于:https://www.cnblogs.com/adelalove/p/8709620.html
總結
- 上一篇: 【SpringCloud】第五篇: 路由
- 下一篇: 【laravel5.4】重定向带参数