LOJ dfs序1234
DFS 序 1
題目要求:
① uuu節(jié)點(diǎn)權(quán)值+x+x+x
② 詢(xún)問(wèn)uuu子樹(shù)權(quán)值和
- uuu節(jié)點(diǎn)權(quán)值+x+x+x :直接加
- uuu子樹(shù)權(quán)值和:dfs序+樹(shù)狀數(shù)組
LOJ提交代碼 DFS 序 1
DFS 序 2
題目要求:
① uuu節(jié)點(diǎn)子樹(shù)權(quán)值+x+x+x
② 詢(xún)問(wèn)uuu子樹(shù)權(quán)值和
- uuu節(jié)點(diǎn)子樹(shù)權(quán)值+x+x+x:dfs序+區(qū)間修改
- 詢(xún)問(wèn)uuu子樹(shù)權(quán)值和:dfs序+區(qū)間求和
區(qū)修+區(qū)改可以用2個(gè)樹(shù)狀數(shù)組或者lazy線段樹(shù)
LOJ提交代碼 DFS 序 2
DFS 序 3,樹(shù)上差分 1
題目要求:
① u?vu\leadsto vu?v 路徑+x+x+x
② 詢(xún)問(wèn)uuu節(jié)點(diǎn)權(quán)值
③ 詢(xún)問(wèn)uuu子樹(shù)權(quán)值和
采用自底向上的差分O(nlog?n)O(n\log n)O(nlogn):
- u?vu\leadsto vu?v路徑+x+x+x:uuu和vvv分別+x+x+x而LCA以及LCA的父親節(jié)點(diǎn)分別?x-x?x
- uuu節(jié)點(diǎn)權(quán)值:由于采用自底向上差分,不難得出原uuu節(jié)點(diǎn)的權(quán)值→\to→ uuu節(jié)點(diǎn)子樹(shù)權(quán)值和,采用dfs序+樹(shù)狀數(shù)組即可解決
- uuu子樹(shù)權(quán)值和:考慮uuu子樹(shù)一個(gè)節(jié)點(diǎn)vvv,經(jīng)過(guò)操作二求法得知對(duì)于差分后節(jié)點(diǎn)vvv的值再求u?vu\leadsto vu?v的路徑上的實(shí)際點(diǎn)權(quán)值時(shí)(子樹(shù)),都會(huì)將vvv的貢獻(xiàn)加上即差分樹(shù)中vvv的值對(duì)子樹(shù)uuu權(quán)值和的貢獻(xiàn)即valv×(depv?depu+1)=valv×depv+(depu?1)×valvval_v×(dep_v-dep_u+1)=val_v×dep_v+(dep_u-1)×val_vvalv?×(depv??depu?+1)=valv?×depv?+(depu??1)×valv?于是有uuu子樹(shù)權(quán)值和為∑v∈Treeuvalv×depv?(depu?1)×∑v∈Treeuvalv\sum_{v\in Tree_u}val_v×dep_v-(dep_u-1)×\sum_{v\in Tree_u}val_vv∈Treeu?∑?valv?×depv??(depu??1)×v∈Treeu?∑?valv?由此得知只需要在用一個(gè)樹(shù)狀數(shù)組維護(hù)valv×depvval_v×dep_vvalv?×depv?即可根據(jù)dfs序求出子樹(shù)valv×depvval_v×dep_vvalv?×depv?和,不難得出uuu子樹(shù)權(quán)值和問(wèn)題也迎刃而解
LOJ提交代碼 DFS 序 3
DFS 序 4
題目要求:
① uuu節(jié)點(diǎn)權(quán)值+x+x+x
② uuu節(jié)點(diǎn)子樹(shù)權(quán)值+x+x+x
③ 詢(xún)問(wèn)u?vu\leadsto vu?v路徑節(jié)點(diǎn)權(quán)值和
對(duì)于u?vu\leadsto vu?v路徑權(quán)值和可以拆分成4條路徑:root?uroot\leadsto uroot?u,root?vroot \leadsto vroot?v,root?root \leadstoroot?LCA,root?root \leadstoroot?LCA的父親,于是只需要維護(hù)根節(jié)點(diǎn)到某個(gè)節(jié)點(diǎn)的權(quán)值和即可解決詢(xún)問(wèn)
于是我們讓每個(gè)節(jié)點(diǎn)的權(quán)值為到根節(jié)點(diǎn)的權(quán)值和
- uuu節(jié)點(diǎn)權(quán)值+x+x+x:此操作會(huì)導(dǎo)致uuu子樹(shù)中所有節(jié)點(diǎn)到根節(jié)點(diǎn)的權(quán)值和+x+x+x,因此需要讓uuu節(jié)點(diǎn)子樹(shù)權(quán)值都+x+x+x
- uuu節(jié)點(diǎn)子樹(shù)權(quán)值+x+x+x:考慮uuu子樹(shù)中一個(gè)節(jié)點(diǎn)vvv,不難得知u?vu\leadsto vu?v路徑上所有點(diǎn)都會(huì)讓vvv節(jié)點(diǎn)權(quán)值+x+x+x即vvv節(jié)點(diǎn)需要增加x×(depv?depu+1)=x×depv?x×(depu?1)x×(dep_v-dep_u+1)=x×dep_v-x×(dep_u-1)x×(depv??depu?+1)=x×depv??x×(depu??1)不難發(fā)現(xiàn)?x×(depu?1)-x×(dep_u-1)?x×(depu??1)可以直接子樹(shù)修改即可而x×depvx×dep_vx×depv?說(shuō)明每一個(gè)xxx對(duì)當(dāng)前節(jié)點(diǎn)權(quán)值增加x×depvx×dep_vx×depv?,只需要用一個(gè)樹(shù)狀數(shù)組記錄一下每個(gè)點(diǎn)最終有多少xxx即可。
LOJ提交代碼 DFS 序 4
總結(jié)
以上是生活随笔為你收集整理的LOJ dfs序1234的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: codeforces1486 F. Pa
- 下一篇: 中国航天员完成在轨交接,神十六乘组将于