• 2023-07-05【树分治】HDOJ 5016
    先预处理出每个点的最近点。。。。然后考虑固定根,对于每个根,从根到子树的路径中任选两条,如果dis[i]+dis[j]<w[j]。那么i就是j的一个合法点。。。。然后递归处理子树即可。。。。扩栈才过的。。。#include<iostream>#include<queue>#include<stack>#include<map>#includ
  • 2023-06-07qoj#5016
    考虑对于每个合法的序列\(b\)对应出唯一序列的\(a\):\(a_i\)为所有对应区间\([l_j,r_j]\)包含\(i\)的\(b_j\)的最大值,若没有则为\(1\)。这样填完之后所有\(a_i\)均为其最小可能值,若所有\(b_i\)的值都正确,则序列\(b\)合法。容易发现这样的映射是单射。考虑统计
  • 2023-04-13HDU 5016 Mart Master II (树上点分治)
    题目地址:HDU5016先两遍DFS预处理出每个点距最近的基站的距离与基站的编号。然后找重心,求出每个点距重心的距离,然后根据dis[x]+dis[y]<d[y],用二分找出当前子树中不会被占领的数量,总点数减去即是被占领的数量。这样就可以求出每个点最多占领的点的数量。然后找最大值即可。