CSP 模拟 43

A 欧几里得的噩梦

每一个数最多只有两个 \(1\),模拟线性基的插入过程,发现插入是一条链,没有之后连向 \(0\) 结束,拿并查集维护这条链,对于单个 \(1\),直接插入即可,两个 \(1\) 的检查两个 \(1\) 最后的位置是否一样,如果一样就不能插入,否则大到小连边。

B 清扫

对于一个不为叶子的节点,清除它的一个石头有两种方式,一种是子树内的两个叶子相连,这种路径的数量为 \(x\),一种是子树内的一个叶子和子树外的一个叶子相连,这种路径的数量为 \(y\)
\(s_i\) 表示 \(i\) 子树内所有叶子的价值,有等式:

\[\begin{aligned} &x+y=a_i\\ &2x+y=s_i \end{aligned} \]

根据这个可以解出唯一的 \(x,y\),首先他们必须都为非负正数,其次对于 \(x\),它不能超过最大数量 \(min(\frac{s_i}{2},s_i-maxa_{leaf})\),如果有一个叶子超过总的一半,那么内路径最多只有 \(s_i-maxa_{leaf}\) 条。对于 \(y\) 来说,如果当前节点是根,则 \(y=0\),它没有外路径了。

C 购物

做法一:考虑判定怎样的一个 \(k\) 合法,有数在 \([k,2k]\) 范围内,小于 \(k\) 的数的和超过 \(k\),排完序后每个数能提供一个区间,每个前缀和能提供一个区间,然后就成了区间并的问题,差分后一遍扫描线即可。
做法二:还是先排序,考虑一个数加进来后会将答案怎样扩展,首先他可以提供的最大还是前缀和,最小就是 \(\frac{k}{2}\),观察是否和上一个前缀和有交,这样又成了一个区间并的问题,两种方法的本质是相同的。

D ants

permu 加强版,回滚莫队套可撤销并查集,不会链表。

posted @ 2024-10-10 19:06  Ishar-zdl  阅读(30)  评论(0)    收藏  举报