題目連線
關於點分樹的一些地方今天終於弄明白了,這個題理解的還可以,就是有點卡常,調了好久還是跑的很慢。。。。。
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define ll long long
#define pr make_pair
#define pb push_back
//#define lc (cnt<<1)
//#define rc (cnt<<1|1)
using
namespace std;
char buffer[
100001],
*s,*t;
inline
char
get_char()
return
*s++;}
inline
intread()
const
int inf=
0x3f3f3f3f
;const ll lnf=
0x3f3f3f3f3f3f3f3f
;const
double dnf=
1e15
;const
int mod=
1e9+7;
const
double eps=
1e-8
;const
int maxn=
100100
;int n,m;
int head[maxn]
,ver[maxn<<1]
,nt[maxn<<1]
,tot=1;
int a[maxn]
;void
add(
int x,
int y)
int d[maxn]
,id[maxn]
,rk[maxn<<1]
,dd[maxn<<1]
;int f[maxn<<1]
[20],_log[maxn<<1]
;int tcnt=0;
void
dfs(
int x,
int fa)
}voidst(
void
)int t=_log[tcnt]+1
;for
(int j=
1;j<=t;j++)}
intlca
(int x,
int y)
intdis
(int x,
int y)
int maxpart[maxn]
,si[maxn]
,fa[maxn]
,sit[maxn]
;bool ha[maxn]
;int root,maxsi;
void
dfs_size
(int x,
int fa)
}void
dfs_root
(int nowroot,
int x,
int fa)
for(
int i=head[x]
;i;i=nt[i])}
void
dfs_for_tree
(int x,
int f)
}int cnt=0;
int rt1[maxn]
,rt2[maxn]
;struct node
t[maxn<<7]
;int
newnode
(void
)void
change
(int
&p,int l,
int r,
int pos,
int val)
intask
(int p,
int l,
int r,
int askl,
int askr)
void
change
(int x,
int val)
}int
ask(
int x,
int k)
return ans;
}void
init
(void
)int
main
(void
)init()
;int last=
0,op;
for(
int i=
1;i<=m;i++
)return0;
}
洛谷P6329 模板 點分樹 震波
在一片土地上有 n 個城市,通過 n 1 條無向邊互相連線,形成一棵樹的結構,相鄰兩個城市的距離為 1 其中第 i 個城市的價值為 value i 不幸的是,這片土地常常發生 並且隨著時代的發展,城市的價值也往往會發生變動。0 x k表示發生了一次 震中城市為 x 影響範圍為 k 所有與 x 距離不...
Luogu6329 模板 點分樹 震波
終於寫了點分樹,iee 資料範圍 n,m le 10 5 權值範圍是 1,10 4 洛谷時限 2s。首先點分治可以用來解決路徑問題,因為 u,v 在點分樹上的 lca 一定在原樹路徑上,同時保證了深度 log n 如果不帶修的話,首先每個點維護乙個 vector,下標為該點在點分樹上的子樹到該點的距...
BZOJ3730 點分樹 震波
鏈結自己找,bzoj還沒開 也很顯然是點分樹維護,對每個點開兩個樹狀陣列,維護點分樹上子樹之和,然後修改詢問仍然暴力爬樹,詢問也是用兩個樹狀陣列作差消掉當前子樹影響 code include using namespace std inline intread while isdigit ch re...