2026.3.30 总结
2026.3.30 总结
T1
我们发现最终一定是一颗树,否则没有意义。
所以一定是树形结构。
设父节点为 \(fa\) ,当前节点为 \(u\) 。
则代价为 \(d_{fa}\ + \ d_u\) 肯定不优于 \(\min {d} + d_u\) 所以我们只需以 \(id_{\min{d}}\) 作为根节点,其它点像它连边即可。
时间复杂度 \(O(n)\) 。
T2
注意到 \(a_i + a_j + a_k = a_l\) 等价于 \(a_i + a_j = a_l - a_k\) 。
每次枚举到位置 \(i\) 时,先统计是否有 \(a_i - a_j\ \ (1 \leq j < i)\) 被标记过。
然后再将 \(a_i + a_j\ \ (1 \leq j < i)\) 标记一下。
就完了。
为了节省时间,我用了 bitset 。
trick:题目给你一个条件,然后让你去统计满足这个条件的数的个数,有时移项后有可能会好做一点。
时间复杂度 \(O(\frac{n}{w})\) 。
T3
赛时写了个暴力的模拟,但是好像过了?
就是模拟一下,枚举上顶点,再找到下端点,然后由于菱形上下对称,所以就只需枚举一半去判合不合法,另一半直接可以一起判。
时间复杂度 \(O(n^2 \cdot m^2)\) 但是跑不满。
T4
老师赛时说了个样例解释,直接把做法说出来了。
其实就是按照老师说的,用短的连接长的。
先将数组排序,然后头尾一个双指针扫一下。
时间复杂度 \(O(n\log{n})\) 。

浙公网安备 33010602011771号