#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,mid
#define rson rt<<1|1,mid+1,r
#define len (r-l+1)
const ll maxn=
500000+10
;ll n,m;
//見題意
ll tot,head[maxn]
,nex[maxn]
,to[maxn]
,w[maxn]
,wt[maxn]
;//鏈式前向星陣列,w、wt初始點權陣列
ll a[maxn<<2]
,laz[maxn<<2]
;//線段樹陣列、lazy操作
ll son[maxn]
,id[maxn]
,fa[maxn]
,cnt,dep[maxn]
,siz[maxn]
,top[maxn]
;//son重兒子編號,id新編號,fa父親節點,cnt dfs_clock/dfs序,dep深度,siz子樹大小,top當前鏈頂端節點
ll res=0;
//查詢答案
inline
void
add(ll x,ll y)
//-------------------------------------- 以下為線段樹
inline
void
pushdown
(ll rt,ll lenn)
inline
void
build
(ll rt,ll l,ll r)
build
(lson)
;build
(rson)
; a[rt]
=(a[rt<<1]
+a[rt<<1|
1]);
}inline
void
query
(ll rt,ll l,ll r,ll l,ll r)
else
}inline
void
update
(ll rt,ll l,ll r,ll l,ll r,ll k)
else
}//---------------------------------以上為線段樹
//當我們要處理任意兩點間路徑時:
//設所在鏈頂端的深度更深的那個點為x點
////ans加上x點到x所在鏈頂端 這一段區間的點權和
//把x跳到x所在鏈頂端的那個點的上面乙個點
//不停執行這兩個步驟,直到兩個點處於一條鏈上,這時再加上此時兩個點的區間和即可
//這時我們注意到,我們所要處理的所有區間均為連續編號(新編號),於是想到線段樹,用線段樹處理連續編號區間和
//每次查詢時間複雜度為o(logn)^2
inline
void
updrange
(ll x,ll y,ll k)
if(dep[x]
>dep[y]
)swap
(x,y)
;update(1
,1,n,id[x]
,id[y]
,k);
}//處理一點及其子樹的點權和:
//想到記錄了每個非葉子節點的子樹大小(含它自己),並且每個子樹的新編號都是連續的
//於是直接線段樹區間查詢即可
//時間複雜度為o(logn)
inline ll qrange
(ll x,ll y)
//直到兩個點處於一條鏈上
if(dep[x]
>dep[y]
)swap
(x,y)
;//把x點深度更深的那個點
res=0;
query(1
,1,n,id[x]
,id[y]);
//這時再加上此時兩個點的區間和即可
ans+
=res;
return ans;
}//當然,區間修改就和區間查詢一樣的啦~~
inline
void
updson
(ll x,ll k)
inline ll qson
(ll x)
inline
void
dfs1
(ll x,ll f,ll deep)
}inline
void
dfs2
(ll x,ll topf)
}int
main()
dfs1(1
,0,1
);dfs2(1
,1);
build(1
,1,n);
scanf
("%lld"
,&m)
;while
(m--
)else
}}
洛谷 P3833 SHOI2012 魔法樹
shoi2012 d2t3 harry potter 新學了一種魔法 可以讓改變樹上的果子個數。滿心歡喜的他找到了乙個巨大的果樹,來試驗他的新法術。這棵果樹共有n個節點,其中節點0是根節點,每個節點u的父親記為fa u 保證有fa u u。初始時,這棵果樹上的果子都被 dumbledore 用魔法清...
洛谷 P3833 SHOI2012 魔法樹
shoi2012 d2t3 harry potter 新學了一種魔法 可以讓改變樹上的果子個數。滿心歡喜的他找到了乙個巨大的果樹,來試驗他的新法術。這棵果樹共有n個節點,其中節點0是根節點,每個節點u的父親記為fa u 保證有fa u u。初始時,這棵果樹上的果子都被 dumbledore 用魔法清...
樹鏈剖分 P3833 SHOI2012 魔法樹
harry potter 新學了一種魔法 可以讓改變樹上的果子個數。滿心歡喜的他找到了乙個巨大的果樹,來試驗他的新法術。這棵果樹共有n個節點,其中節點0是根節點,每個節點u的父親記為fa u 保證有fa u u。初始時,這棵果樹上的果子都被 dumbledore 用魔法清除掉了,所以這個果樹的每個節...