USACO 2023 February Contest, Platinum 题解

Hungry Cow

题意:有一些 \((d_i,b_i)\) 表示在 \(d_i\) 天有 \(b_i\) 的食物,如果这一天有食物,奶牛会吃一单位食物,否则不吃,动态修改,问吃到食物的天的编号之和。\(N\le 10^5\)

题解:用线段树维护区间的信息,维护差多少可以让这个区间吃满,这个区间会传给后面多少以及区间编号和。查询一个有 \(k\) 个单位食物经过一个区间可以线段树二分实现,在线段树 update 的时候到右子树查询左子树多出来的部分(即楼房重建线段树),这样就维护出了答案。

Problem Setting

题意:有 \(N(N\le 10^5)\) 道题,\(M(M\le 20)\) 头奶牛,每头奶牛有个评价,简单的或者困难的,你要求多少个题目序列,满足任意一头奶牛都有这个题目序列满足简单的在困难的之前。

题解:考虑将每个题看成一个长度为 \(M\) 的二进制数,我们相当于找 \(S1\subset S2\subset S3 \subset \dots\subset S_k\)。然后这个暴力 \(O(3^M)\) dp 就行了,因为 \(N\) 特别小,有值的位置只有 \(10^5\) 个。

Watching Cowflix

题意:给定一棵树,有一些关键点,找一些不相交的连通块,包含所有关键点,这个的权值为 \(\sum_{i=1}^C (|c_i|+K)\)。让你对每个 \(K\) 求权值最小值。

题解:考虑给定 \(K\),可以有一个线性的 dp:\(f_u\) 表示 \(u\) 这个点在连通块里,\(g_u\) 表示 \(u\) 这个点不再连通块里的最小值。我们考虑所有 \(K\),画成函数的形式,\(F(K)\) 表示 \(K\) 的答案,我们发现 \(F(K)\) 可以表示成根号个分段函数(斜率小于根号最多根号段,斜率大于根号个数不超过根号)。分治求 \(F(K)\),如果遇到 \(F(l)\)\(F(r)\) 相等,那么 \(F(l\dots r)\) 都相等。复杂度 \(O(n\sqrt n\log n)\)

posted @ 2023-02-27 08:40  xay5421  阅读(145)  评论(0编辑  收藏  举报