hdu 5354 树上点分治
给出一颗n个结点的树,点上有权 求点对(x,y)的数量 其中 x!=y,x到y的路径上最大值与最小值的差<=D 按最小值排序,用最大值二分最小值比他小的所有点,容斥一下,最后答案*2即可 #include<bits/stdc++.h> #define ll long long #define rep(ii,a,b) for(int ii=a;ii<=b;++ii) #define per(ii,a,b) for(int ii=b;ii>=a;--ii) #define IO ios::sync_with_stdio(false);cin.tie(0);cout.tie(0) #define fi first #define se second #define mp make_pair #define pii pair<int,int> using namespace std;//head const int maxn=1e5+10,maxm=2e6+10; const ll INF=0x3f3f3f3f,mod=1e9+7; int casn,n,m,k; int val[maxn]; namespace graph{ struct node{int to,next;}e[maxn<<1]; int head[maxn],nume,all,root,maxt,sz[maxn];