点分治是树上的一种算法范式,可以解决一些树上问题。
从例题来看吧:
P4178 Tree
题目描述
给定一棵 \(n\) 个节点的树,每条边有边权,求出树上两点距离小于等于 \(k\) 的点对数量。
输入格式
第一行输入一个整数 \(n\),表示节点个数。
第二行到第 \(n\) 行每行输入三个整数 \(u,v,w\) ,表示 \(u\) 与 \(v\) 有一条边,边权是 \(w\)。
第 \(n+1\) 行一个整数 \(k\) 。
输出格式
一行一个整数,表示答案。
输入输出样例 #1
输入 #1
7
1 6 13
6 3 9
3 5 7
4 1 3
2 4 20
4 7 2
10
输出 #1
5
说明/提示
数据规模与约定
对于全部的测试点,保证:
- \(1\leq n\leq 4\times 10^4\)。
- \(1\leq u,v\leq n\)。
- \(0\leq w\leq 10^3\)。
- \(0\leq k\leq 2\times 10^4\)。
解决这个问题,大概分为4个步骤。DFS!计算经过以x为根的路径方案!枚举每一个子节点,来统计各个点到x的距离!双指针统计!