清华集训2017做题记录
清华集训2017做题记录 已完成 【清华集训2017】榕树之心 【清华集训2017】某位歌姬的故事 未完成 【清华集训2017】生成树计数 【清华集训2017】无限之环 【清华集训2017】Hello world! 【清华集训2017】小Y和地铁 【清华集训2017】小Y和二叉树 【清华集训2017】小Y和恐怖的奴隶主 【清华集训2017】简单数据结构 【清华集训2017】福若格斯 【清华集训2017】避难所 【清华集训2017】我的生命已如风中残烛 Orz \(\text{pinkex}\) 早就切穿清华集训,遥遥领先。 【清华集训2017】榕树之心 先判断最后能否到 \(1\) 怎么做,考虑每一个节点不同儿子子树的两次操作会相互抵消,显然移回当前节点剩下最少操作的方案一定是剩下若干来自最大儿子子树的点,那么只需要尽可能消除最大儿子子树即可。 令 \(tot[u]\) 表示从 \(u\) 子树内从 \(u\) 出发最后回到 \(u\) ,最少剩余的生长操作数量。 \[ \begin{cases} tot[u] = sz[u] \bmod 2, & sz[u]-sz[v]-1 \geq tot[v]+1 \\ tot[u]=tot[v]+1-(sz[u]-tot[v]-1), &otherwise \end{cases} \] 其中 \(v\) 是 \(u\)