RT,其实也涉及到时间复杂度。首先在状态转移时上界的确定不用多说,下界也是需要关注的,因为我们在第二层循环时,必须要满足l≥k - (size[u] - size[v]),这样是为了排除掉:我们假定j是u为根的子树中染黑的节点数,u为根子树除开v子树外节点数小于j - l的情况(也就是节点数小于需要染黑的节点数的情况)。而将f数组初始化为-1也是为了这个目的,但是就时间上来说,直接让第二层循环中l从k-(size[u]-size[v])开始(也就是确定下届)的时间比直接从0开始而遇到f数组为-1再break要快得多(我也不确定直接从0开始的时间复杂度是不是对的)。
再说为什么size数组要边dp边更新,因为我们是考虑从u节点所连接的子树一棵一棵地更新答案,也就是说,我们在更新对应v子树时的答案时,旧的答案应该是v子树往左(假设从左往右遍历子树)的所有子树所更新来的答案,并用此旧的答案来更新新的答案,假如提前把size更新好,那么肯定会有重复计算,于是答案也就不对了。