CF 342E Xenia and Tree(分块)

题意:给出一棵树,最开始结点1为红色,其他点为蓝色。有两种操作,一种是把某个结点变为红色,另一种是查询某个点与这个点最近的红色结点的距离。

思路:这题感觉纠结了好久。。。其实利用分块的方法非常简单粗暴,用mind[u]表示距离u最近的红点的距离,把第一个操作分块,每次执行第一个操作时把这个点存下来,当点的数量到达sqrt(m)时,利用bfs更新点到最近红点的距离。查询时,结果为保存的点和查询点的距离的和mind[u]的较小值。


代码:


#include 
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define inf 0x3f3f3f3f
#define Inf 0x3FFFFF

你可能感兴趣的:(数据结构,datastruct)