[BZOJ2051]A Problem For Fun/[BZOJ2117]Crash的旅游计划/[BZOJ4317]Atm的树 题目大意: 给出一个\(n(n\le10^5)\)个结点的树,每条边有一个正整数权值\(w_i(w_i\le10^4)\),定义两个结点的距离为连接这两个结点路径上边权的和.对于每个结点\(i\),它到其他\(n-1\)个结点都有一个距离,将这些距离从小到大排序,输出第\(k\)个距离. 思路: 重心剖分预处理每个重心管辖范围内从重心出发能够组成的所有距离.询问时二分…
树的点分治,将点分治的过程记录下来,每一个分治结构按到分治中心的距离维护所有点. 对于一个点二分答案,然后在$O(\log n)$个分治结构中二分查找,时间复杂度$O(n\log^3n)$. #include<cstdio> #include<algorithm> const int N=50010,M=1000010; int n,m,i,x,y,z,g[N],nxt[N<<1],v[N<<1],w[N<<1],ok[N<<1],e…