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