2018吉林信息学冬令营day5

依然10分。。。

上午讲课实况:树,树的遍历,

先T1

题目大意求树的直径。。。

一开始不知道是求直径。。。

算了给真题目:求一个树上任意两点间距离最大的距离

一开始我以为,为每个点维护他下面的最大的和

然后就写了一个小时

发现不行。。。

递归到每个点访问下,再回来tmd超时了

然后开始想正解

没想出来

就交了个10分

然后T2

有一颗萌(mei)萌(shi)哒(xian)的树老换根,然后还不停地问“我第x点的子树多大”
让你写代码解决他
md暴力吧
拍拍拍,卧槽时间不够了
好吧我得快点了。。。
正解:

预处理每个点以为根子树大小。

设当前的根为 x 点,询问 y 点子树大小。

如果 x 点在 y 点以为根的子树之外,那么以 x 为根 y 的子树与以为根 y 的子树相同。

否则,如果 y 是此时的根,即 x  y 重合,那么子树即为整棵树。否则 x  y 的子树内且不为 y,此时 y  x 的祖先。

x  y 路径上除去 y 的最后一个点为 zz  y 的一个儿子。那么以 x 为根 y 的子树为整棵树去掉以为根 z 的子树。

可以通过一次 dfs 预处理出每个点以为根子树大小。

判断 x 是否在 y 的以为根的子树内部,可以判断 x 是否在 y 子树对应的 dfs 序区间中。 z 点可以通过倍增求出。

时间复杂度 O(n log n + Q log n)

(来自讲课的学长 zeyu song )

最后T3

不会。。。就放弃了。。。到现在没看懂题

总结与反思

小学奥数见祖宗。
奥数没学好题都看不懂。。。
所以。。。。狂补小学奥数。。。
今天很迷啊

你可能感兴趣的:(冬令营)