洛谷P4178 Tree(點分治)

2022-08-21 05:00:12 字數 975 閱讀 9295

考慮點分治,對於乙個子樹,求出每個點到根的距離並排序,用雙指標掃瞄,但這樣會把來自同乙個兒子的路徑也統計上去,再對每個兒子做一遍,減去即可。

#include#include

#include

#include

using

namespace

std;

typedef

long

long

ll;const

int n=40005

;char rb[1

<<21],*s,*t;

inline

char gc()

inline

intrd()

int g[n],to[n<<1],w[n<<1],nxt[n<<1],cnt=0

,sz[n],f[n],sum,rt,d[n],t[n],tot,k;

ll ans=0ll;

bool

vis[n],inq[n];

queue

q;inline

void add(int u,int v,int

c)void getrt(int u,int fa)

f[u]=max(f[u],sum-sz[u]);

if(f[u]u;

}inline ll calc(

int u,int

k) }

sort(t+1,t+tot+1

);

for(l=1,r=tot;l<=r;++l)

return

ans;

}void solve(intu)}

intmain()

k=rd();

getrt(

1,0);solve(rt);

printf(

"%lld

",ans);

return0;

}

view code

洛谷P4178 Tree 分塊

給你一棵樹,以及這棵樹上邊的距離,問有多少對點它們兩者間的距離小於等於kkk。這道題是應該加強資料了。當然如果這道題不打算做點分治模板題的話可以不用 o n nlog n o n sqrt n log sqrt n o nn logn 分塊在洛谷優秀的o2o2 o2下過了。我們假設1 11為樹根,d...

洛谷p4178 點分治 線段樹

這道題目是點分治的題目,與模板題不一樣的是,這是要統計小於路徑長度為k的點對數。我們分析下與模板題的區別,模板要求的是路徑等於k的長度的路徑是否存在,然後統計的方法是對於每個重心 跟 求出各點與根的路徑,然後重心下面的各個子樹中,相同的子樹不去統計答案,去計算之前非該子樹的路徑能否湊出k的路徑,也就...

洛谷4178 BZOJ1468 Tree題解點分治

點分治的入門練習。題目鏈結 bzoj的鏈結 許可權題 關於點分治的思想我就不再重複了,這裡重點說一下如何判重。我們來看上圖,假設我們去除了1節點,求出d 2 1,d 3 d 4 2 假設k為5,這樣我們會認為節點 2,3 2,4 3,4 的距離小於k,從而累計到答案中 但是我們以2為root做點分治...