题目
给一颗树,$N$个点,$N-1$条边。有$K$个警察局,第$i$个警察局在点$p_i$上。
性质$P$定义为:对任意点$v$,存在警察局$u$,使得$dist(u,v)\leq D$ 。
初始的图满足性质$P$。
问:最多删除哪些边使得图仍然满足性质$P$。
数据范围
$2\leq N \leq 3\times 10^5\quad 1 \leq K \leq 3 \times 10^5 \quad 0\leq D \leq N-1$
做法
先考虑最多能删除多少边。在树上,每删除一条边,就多一个连通块。为了满足性质$P$,显然最多只能有$K_{real}$个连通块。其中,$K_{real}$为其上有警察局的节点的个数。这点容易反证得出。由此,我们得出了删除的边数的一个上界是$K_{real}−1$ 。
现在考虑如何删。由于初始图满足性质$P$,所以每个点到距其最近的警察局的距离$\leq D$。于是,我们只要保证每个点能够到达距其最近的警察局即可,其余的边都删掉。这样,我们便将树分成了$K_{real}$个连通块,也即删去了$K_{real}-1$条边。
所以,最多删去$K_{real}-1$条边,删除方法如上所述,可用$BFS$实现。
代码
|
|
注意
对删除的边计数的时候,注意去重。
开始我的做法不是对有警察局的点一起$BFS$,而是对这些点一个一个$BFS$。但是这样会造成删边之后有些点不能到达警察局。不满足性质$P$。
比如下图,$1$和$5$有警察局,$D=2$。如果从$1$开始$BFS$,那么会造成搜不到$4$的情况。