Luogu3806 點分治(點分治)

2022-03-20 08:43:41 字數 1022 閱讀 6349

給定一棵有n個點的樹

詢問樹上距離為k的點對是否存在。

n,m 接下來n-1條邊a,b,c描述a到b有一條長度為c的路徑

接下來m行每行詢問乙個k

對於每個k每行輸出乙個答案,存在輸出「aye」,否則輸出」nay」(不包含引號)

點分治的模板題目,不做過多的解釋

據我這個蒟蒻的觀察

這道題的複雜度是\(o(n^2)\)

#include#include#include#include#include#include#include#include#include#includeusing namespace std;

#define max 11000

#define inf 1000000000

#define k 10000000

inline int read()

struct line

e[max<<1];

int h[max],cnt=1;

int size[max],minr,root,size;

int s[max],tot;

bool vis[max];

int num[k+10],n,m;

inline void add(int u,int v,int w)

; h[u]=cnt++;

}void getroot(int u,int ff)

ret=max(ret,size-size[u]);

if(ret}void getdep(int u,int ff,int dep)

}void calc(int u,int fl,int pr)

void dfs(int u)

}int main()

minr=n;getroot(1,1);

dfs(root);

while(m--)

num[read()]?puts("aye"):puts("nay");

return 0;

}

Luogu3806 點分治(點分治)

給定一棵有n個點的樹 詢問樹上距離為k的點對是否存在。n,m 接下來n 1條邊a,b,c描述a到b有一條長度為c的路徑 接下來m行每行詢問乙個k 對於每個k每行輸出乙個答案,存在輸出 aye 否則輸出 nay 不包含引號 點分治的模板題目,不做過多的解釋 據我這個蒟蒻的觀察 這道題的複雜度是o n2...

luogu 3806 模板 點分治

給定一棵有n個點的樹,有m個詢問,每個詢問樹上距離為k的點對是否存在。樹的權值最多不超過c。n 10000,m 100,c 1000,k 10000000。關於樹的路徑的問題,點分治是一種最吼的工具。由於這道題的m比較小,列舉k,通過set儲存每顆子樹中點的路徑值,在set中查詢每個k值是否成立即可...

Luogu P3806點分治模板(點分治)

題目鏈結 wc聽不懂lca講的高等數學專場 乙個字都聽不懂 然後就自學了點分治。點分治就是我先處理完跟根有關的東西,然後把根標記掉,把原樹拆成若干個聯通塊,然後分別對每個聯通塊 每個小樹 搞一模一樣的操作。然後要每次求重心,因為點分治複雜度跟遞迴深度有關。本題判斷的時候偷懶用map,其實自己寫的sp...