Rase[点分治]

Rase[点分治]_第1张图片

Rase[点分治]_第2张图片 


点分治,处理出每个点的dis与dep , 用ans[i]表示i可能作为答案

然后按dis排序,两个指针扫到dis=k的就更新ans[dep] , 处理子树的时候减一下子树的贡献就可以了

复杂度O(n*logn^2)


#include
#define N 200005
#define inf 0x3fffffff
using namespace std;
int first[N],next[N*2],to[N*2],w[N*2],tot;
int n,k,vis[N],ans[N],dep[N],now;
int size[N],Siz,rt,Mson[N]; 
struct Node{int dis,dep;}tmp[N];
bool cmp(Node a,Node b){return a.dis0) {printf("%d",i); return 0;}
	printf("-1"); return 0;
}

 

你可能感兴趣的:(点分治)