傳送門
點分樹板題。。。
然而並沒有遇到卡常之類的事。。。
對於分出來的每一層用兩棵bit
bitbi
t動態維護到自己距離不超過k
kk的與到自己點分樹父親距離不超過k
kk的點數。
**:
#include
#define ri register int
using
namespace std;
const
int rlen=
1<<18|
1;inline
chargc(
)inline
intread()
const
int n=
1e5+5;
vector<
int>e[n]
;int n,m,a[n]
;struct bit
inline
void
init
(const
int&k)
inline
void
update
(int x,
const
int&v)
inline
intquery
(int x)
}t1[n]
,t2[n]
;int siz[n]
,hson[n]
,top[n]
,fa[n]
,dep[n]
,all,ms,rt,fa[n]
;bool vis[n]
;void
dfs1
(int p)
}void
dfs2
(int p,
int tp)
inline
intlca
(int x,
int y)
return ret-
2*dep[dep[x]
?x:y];}
void
getroot
(int p,
int fa)
mss=
max(mss,all-siz[p]);
if(mss}int mdp=
0,m***=0;
void
dfs(
int p,
int fa,
int dist,
int anc)
}inline
void
solve
(int p)
}inline
intquery
(int x,
int k)
for(ri t,i=x;fa[i]
;i=fa[i]
)return ret;
}inline
void
update
(int x,
int v)
a[x]
=v;}
intmain()
}for
(ri ans=
0,op,x,y;m;
--m)
case1:
}}return0;
}
BZOJ3730 點分樹 震波
鏈結自己找,bzoj還沒開 也很顯然是點分樹維護,對每個點開兩個樹狀陣列,維護點分樹上子樹之和,然後修改詢問仍然暴力爬樹,詢問也是用兩個樹狀陣列作差消掉當前子樹影響 code include using namespace std inline intread while isdigit ch re...
點分樹 樹狀陣列 BZOJ 3730 震波
線段樹t成翔 只能用vector寫bit 痛苦的回憶啊 思路不難想 先建出點分樹 然後每個點對於他掌管的點的距離與權值建成bit 然後每次查詢就是爬點分樹 這裡有點注意 往樹上爬的時候不能中途break,不會因為有乙個祖先爬不上去就終止,說不定有乙個爺爺比爸爸還近 include include i...
BZOJ3730 震波 動態點分治
include include include include include include define space putchar define enter putchar n using namespace std typedef long long ll template void rea...