bzoj4012 動態點分治 卡常數

2021-07-26 17:48:32 字數 977 閱讀 2772

這是一種型別的動態點分治

動態點分治,關鍵還是要在均攤n的空間複雜度記憶體下所有東西。這個就要充分利用stl,比如vector

每乙個點存以這個點為根點分治的資訊。

對於詢問乙個點的路徑時,就是沿著點分治樹,不斷朝fa走,每走一層統計一下,因為分治樹可以保證在log層內,時間複雜度同階

卡常數無優化:43848ms

優化一:取模優化(x-=mod 代替 % ) + 迴圈展開+ 一部分inline :43612ms

第三次:將i++改為++i:速度稍減慢,dfs(int &u)佔位符加速也沒有體現出來

優化不下去了

#include#include#include#include#include#include#include#include#define fi first

#define se second

#define pii pair#define mk(a,b) make_pair((a),(b))

using namespace std;

typedef long long ll;

const int n=150005;

inline int read()

int n,q,a;ll ans;

int u,l,r;

/struct bian

}e;//

int age[n],fa[n];ll dis[n];

struct aa

return ans;

} int dis(int u)

int id(int u)

void init() }

void work(int u)

num++;

} }tt[u].init();

}void dfs(int u,int fat)

///void init()

return 0;

}

動態點分治 bzoj 3730,bzoj 1095

總結一下動態點分治的模板。對於乙個樹,把它點分的同時記錄每個點的所有父親 logn個 並記錄點距其父親的距離。具體實現就是dfs的時候fa x dep x u,dis x dep x d bzoj1095 您需要寫乙個程式支援反轉點的顏色,求距離最遠的黑色點對的距離。解析 在每個點u存乙個堆st記錄...

BZOJ3730 震波 動態點分治

include include include include include include define space putchar define enter putchar n using namespace std typedef long long ll template void rea...

BZOJ3730 震波 動態點分治

在一片土地上有n個城市,通過n 1條無向邊互相連線,形成一棵樹的結構,相鄰兩個城市的距離為1,其中第i個城市的價值為value i 不幸的是,這片土地常常發生 並且隨著時代的發展,城市的價值也往往會發生變動。0 x k 表示發生了一次 震中城市為x,影響範圍為k,所有與x距離不超過k的城市都將受到影...