洛谷 P3833 SHOI2012 魔法樹

2022-03-03 08:44:48 字數 2151 閱讀 9931

shoi2012 d2t3

harry potter 新學了一種魔法:可以讓改變樹上的果子個數。滿心歡喜的他找到了乙個巨大的果樹,來試驗他的新法術。

這棵果樹共有n個節點,其中節點0是根節點,每個節點u的父親記為fa[u],保證有fa[u] < u。初始時,這棵果樹上的果子都被 dumbledore 用魔法清除掉了,所以這個果樹的每個節點上都沒有果子(即0個果子)。

add u v d

表示將點u和v之間的路徑上的所有節點的果子個數都加上d。

接下來,為了方便檢驗 harry 的魔法是否成功,你需要告訴他在釋放魔法的過程中的一些有關果樹的資訊:

query u

表示當前果樹中,以點u為根的子樹中,總共有多少個果子?

輸入格式:

第一行乙個正整數n (1 ≤ n ≤ 100000),表示果樹的節點總數,節點以0,1,…,n − 1標號,0一定代表根節點。

接下來n − 1行,每行兩個整數a,b (0 ≤ a < b < n),表示a是b的父親。

接下來是乙個正整數q(1 ≤ ? ≤ 100000),表示共有q次操作。

後面跟著q行,每行是以下兩種中的一種:

a u v d,表示將u到v的路徑上的所有節點的果子數加上d;0 ≤ u,v

q u,表示詢問以u為根的子樹中的總果子數,注意是包括u本身的。

輸出格式:

對於所有的query操作,依次輸出詢問的答案,每行乙個。答案可能會超過2^32 ,但不會超過10^15 。

輸入樣例#1: 複製

4

0 11 2

2 34

a 1 3 1

q 0q 1

q 2

輸出樣例#1: 複製

3

32

#include#define n 1010100

#define ll long long

using

namespace

std;

struct

node e[n];

struct

tree tr[n];

ll n,m,head[n],tot,ans;

//(u,v)樹上修改

//詢問子樹大小

void

add(ll u,ll v)

ll dep[n],siz[n],son[n],fa[n];

void

dfs(ll u,ll f,ll deep)

}ll top[n],id[n],item;

void

dfs2(ll u,ll topf)

}void

build(ll k,ll l,ll r)

void

upda(ll k)

void

down(ll k)

void

change_llerval(ll k,ll l,ll r,ll p)

if(tr[k].f) down(k);

if(l<=mid) change_llerval(k*2

,l,r,p);

if(r>mid) change_llerval(k*2+1

,l,r,p);

upda(k);

}void

ask_llerval(ll k,ll l,ll r)

if(tr[k].f) down(k);

if(l<=mid) ask_llerval(k*2

,l,r);

if(r>mid) ask_llerval(k*2+1

,l,r);

upda(k);

}void

change(ll a,ll b,ll p)

if(dep[a]change_llerval(

1,id[b],id[a],p);

}ll sum(ll a)

intmain()

dfs(

1,0,1

); dfs2(

1,1);

build(

1,1,n);

scanf(

"%lld

",&m);

for(ll a,b,c,i=1; i<=m; i++)

else

}return0;

}

洛谷 P3833 SHOI2012 魔法樹

shoi2012 d2t3 harry potter 新學了一種魔法 可以讓改變樹上的果子個數。滿心歡喜的他找到了乙個巨大的果樹,來試驗他的新法術。這棵果樹共有n個節點,其中節點0是根節點,每個節點u的父親記為fa u 保證有fa u u。初始時,這棵果樹上的果子都被 dumbledore 用魔法清...

P3833 SHOI2012 魔法樹 樹鏈剖分

include define ll long long define rll register int using namespace std template typename t inline void read t x define mid l r 1 define lson rt 1,l,m...

樹鏈剖分 P3833 SHOI2012 魔法樹

harry potter 新學了一種魔法 可以讓改變樹上的果子個數。滿心歡喜的他找到了乙個巨大的果樹,來試驗他的新法術。這棵果樹共有n個節點,其中節點0是根節點,每個節點u的父親記為fa u 保證有fa u u。初始時,這棵果樹上的果子都被 dumbledore 用魔法清除掉了,所以這個果樹的每個節...