依然10分。。。
上午讲课实况:树,树的遍历,
先T1
题目大意求树的直径。。。
一开始不知道是求直径。。。
算了给真题目:求一个树上任意两点间距离最大的距离
一开始我以为,为每个点维护他下面的最大的和
然后就写了一个小时
发现不行。。。
递归到每个点访问下,再回来tmd超时了
然后开始想正解
没想出来
就交了个10分
然后T2
有一颗萌(mei)萌(shi)哒(xian)的树老换根,然后还不停地问“我第x点的子树多大”
让你写代码解决他
md暴力吧
拍拍拍,卧槽时间不够了
好吧我得快点了。。。
正解:
预处理每个点以 1 为根子树大小。
设当前的根为 x 点,询问 y 点子树大小。
如果 x 点在 y 点以 1 为根的子树之外,那么以 x 为根 y 的子树与以 1 为根 y 的子树相同。
否则,如果 y 是此时的根,即 x 与 y 重合,那么子树即为整棵树。否则 x 在 y 的子树内且不为 y,此时 y 是 x 的祖先。
设 x 到 y 路径上除去 y 的最后一个点为 z,z 是 y 的一个儿子。那么以 x 为根 y 的子树为整棵树去掉以 1 为根 z 的子树。
可以通过一次 dfs 预处理出每个点以 1 为根子树大小。
判断 x 是否在 y 的以 1 为根的子树内部,可以判断 x 是否在 y 子树对应的 dfs 序区间中。 z 点可以通过倍增求出。
时间复杂度 O(n log n + Q log n)
(来自讲课的学长 zeyu song )
最后T3
不会。。。就放弃了。。。到现在没看懂题
总结与反思
小学奥数见祖宗。
奥数没学好题都看不懂。。。
所以。。。。狂补小学奥数。。。
今天很迷啊