華華和月月種樹(dfs序 樹狀陣列)

2022-07-24 06:09:12 字數 1212 閱讀 2243

對一棵樹(初始只有 0 號節點,權值為 0)進行操作和詢問:

操作 1:輸入格式1 i,表示使節點 i 長出了乙個新的兒子節點,權值為0,編號為當前最大編號 +1(也可以理解為,當前是第幾個操作 1,新節點的編號就是多少)。

操作 2:輸入格式 2 i a,表示華華上線做任務使節點 i 的子樹中所有節點(即它和它的所有子孫節點)權值加 a 。

詢問 3:輸入格式3i,華華需要給出 i 節點此時的權值。

先將樹變成dfs序,然後就是樹狀陣列了。當在節點 i 進行操作 2 的時候,就相當 [ dfn[i] , dfn[i]+sz[i]-1 ]範圍加上a。當進行操作 1 的時候,只需要把新加入的節點權值變成0即可。

1 #include 2

using

namespace

std;34

const

int maxn=1e5+10

;5 vectorv[maxn];

6int

n,m,cnt;

7int

dfn[maxn];//dfs序,相當於節點在樹狀陣列中的下標

8int sz[maxn]; //sz[i] 表示節點 i 為根的子樹的所有節點數z

9int

tree[maxn];

10struct

query

11q[maxn<<2

];14

15int sum(int

x)16

23return

s;24}25

26void update(int x,int

s)2733}

3435

void dfs(int

u)3644}

4546

void

solve()

56else

if(q[i].op==2

)57 scanf("

%d",&q[i].a);58}

59 dfs(0

);60

for(int i=0;i)

6168

else

if(q[i].op==2)69

73else

74 printf("

%d\n

",sum(dfn[q[i].i]));75}

76}7778

signed main()

華華和月月種樹

時間限制 c c 2秒,其他語言4秒 空間限制 c c 131072k,其他語言262144k 64bit io format lld 華華看書了解到,一起玩養成類的遊戲有助於兩人培養感情。所以他決定和月月一起種一棵樹。因為華華現在也是資訊學高手了,所以他們種的樹是資訊學意義下的。華華和月月一起維護...

華華和月月種樹(牛客)

題意 華華看書了解到,一起玩養成類的遊戲有助於兩人培養感情。所以他決定和月月一起種一棵樹。因為華華現在也是資訊學高手了,所以他們種的樹是資訊學意義下的。華華和月月一起維護了一棵動態有根樹,每個點有乙個權值。剛開存檔的時候,樹上只有 0 號節點,權值為 0 接下來有兩種操作 操作 1 輸入格式1 i,...

華華和月月逛公園 tarjin求割邊 模板

月月和華華一起去逛公園了。公園很大,為了方便,可以抽象的看成乙個n個點m條邊的無向連通圖 點是景點,邊是道路 公園唯一的入口在1號點,月月和華華要從這裡出發,並打算參觀所有的景點。因為他們感情很好,走多遠都不會覺得無聊,所以所有景點和道路都可以無數次的重複經過。月月發現,有些路可走可不走,有些路則必...