POJ-1741Tree(树分治模板)

题意:求树上距离小于等于m的点对有多少个。

#include
#include
#include
#include
#include
using namespace std;
const int maxn=1e4+100;
struct node{
    int x,w;
    node(int _x,int _w)
    {
        x=_x;
        w=_w;
    }
};
vectora[maxn];
int hvy,n,m,vis[maxn],siz[maxn],ma[maxn];
int S;  //树的大小
void dfs_hvy(int u,int fa)//找重心
{
    siz[u]=1;
    ma[u]=0;
    for(int i=0;ii&&tmp[i]+tmp[j]>m)j--;///
        res+=max(j-i,0);///
    }
    return res;
}
int ans;
void dfs_ans(int u)
{
    vis[u]=1;
    ans+=dfs_sum(u,0);//加上经过重心的点对数(加的里面包括了不经过的,需要在下面再减去)
    for(int i=0;i

从这篇博客学到的

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