虚树可以看做是对树形动态规划的一种求解优化 对于需要求答案的点p,只保留对答案有影响的节点,从而减少时间 BZOJ2286 dp[i]=min(val[i],Σdp[j](j为i的儿子)),val[i]表示将i和根节点分离的代价 方程为什么这么写呢?val也就是从当前i到根节点的边权的最小值 为了让代价最小,最后的dp[root]就是答案了,树形dp是先递归调用到根然后回溯的过程中求值,回溯到根节点的时候答案就显然了 我们可以只用询问点及他们的LCA来建一颗新树,我们暂且称其为虚树,然后在虚树上…