BalticOI2022 小记

P8393 [BalticOI 2022 Day2] Stranded Far From Home

给图中的边 \(e(u, v)\) 赋权 \(max(a_u, a_v)\),建出 kruskal 最小重构树.

考察 kruskal 重构树上的点 \(x\) 代表边 \(e(u, v)\).其代表遍历过的节点权值和已经能解锁边权不超过 \(max(a_u, a_v)\) 的边.那么其下一步可以扩展的最小的边一定是其在 kruskal 重构树上的父亲.我们只需要判断子树内的点权和与父亲边权的大小关系即可.故可以在建树时将子树点权和求出,然后进行一遍 dfs 判断每个点是否合法即可.

P8391 [BalticOI 2022 Day1] Event Hopping

正难则反.我们考虑贪心地为一个区间选择其前置的区间———右端点包含在本区间范围内的左端点最小的区间.然后 使用 st 表倍增跳区间就做完了.

P8392 [BalticOI 2022 Day1] Uplifting Excursion

先拿走所有物品.记 \(sum=\sum_i ia_i,\ smx=\sum_{i> 0} ia_i,\ smn=\sum_{i< 0} ia_i\)

首先判掉 \(L<smn\)\(L>smx\),无力回天.

不失一般性地讨论 \(L<sum\),我们需要使得 \(sum\) 变小一点.在保证 \(sum \ge L\) 的情况下先贪心地去掉较大的物品.显然调整过后 \(sum-L \le 300\).这时存在结论:

设组成 \(sum\) 的构造中大小为 \(i\) 的物品使用了 \(x_i\) 个;组成最终方案的构造中大小为 \(i\) 的物品用了 \(y_i\) 个.那么 \(\sum(|y_i-x_i|) \le 2m\)

证明:调整过程中可以通过改变加入、删除物品的顺序使得 \(sum\) 的值保持 \(\in [L-300, L+300]\).而调整过程中 \(sum\) 在任意一种状态都最多只会出现 \(1\) 次.因为两次经过同一种状态时物品的数量一定会更少.

然后就可以用单调队列或者二进制分组来优化背包.

P8394 [BalticOI 2022 Day2] Boarding Passes

首先解释一下题意.我可以安排小组登船的顺序和每个小组中每个人是从前登船还是从后登船.每组的人听完安排后进船的顺序随机.询问最小化每个人进船与入座乘客相遇次数的总和的期望.

\(G\) 状态压缩.设 \(S\) 表示已经登船的小组的集合.\(F_S\) 表示令 \(S\) 中的人登船的最小期望代价.

不妨考虑 \(F_S \rightarrow F_{S \cup u}(u \notin S)\) 的转移.\(u\) 小队的人显然会被划分成前后两部分,分别从前面和后面登船.不妨设前 \(k (k \le |u|)\) 个人从前登船.\(u\) 内部产生的代价可以和外部产生的代价可以分开算.

\(u\) 内部的代价是长度为 \(k\)\(|u|-k\) 的排列逆序对数量期望之和,\(=\frac{k(k-1)+(|u|-k)(|u|-k-1)}{4}\)

外部产生的贡献可以预处理.例如记 \(f_{i,j,k}\) 表示当 \(i\)\(j\) 组后面登船,令 \(i\) 中前 \(k\) 个人从前登船,\(j\)\(i\) 造成的贡献.那么转移时贡献就是 \(\sum_{i \neq u,i \in S}f_{u, i, k}\)

如何快速决策?我们有性质:\(\frac{k(k-1)+(|u|-k)(|u|-k-1)}{4},\sum_{i \neq u,i \in S}f_{u, i, k}\) 关于 \(k\) 都是凸的.加起来同样是凸的.于是我们可以直接二分到决策点.

#3774. 「BalticOI 2022 Day1」Art Collections

luogu 怎么没传题啊.

先询问排列 \(Q\).再询问 \(Q\) 循环左移一位得到的 \(Q'\).可以通过两次回答做差解出 \(Q_1\)\(P\) 中的位置.故我们只需要询问 \(Q=\{1,2,3\cdots\}\) 的每个循环左移即可.

posted @ 2023-11-21 15:37  ckain  阅读(121)  评论(0)    收藏  举报