CF1815C

发布时间 2023-04-16 09:36:51作者: EulerPikachu

1 解法

\(f_i\)\(i\) 最多出现多少次,那么一个限制 \((u,v)\) 可以写成 \(f_u \leq f_v +1\),把 \(f\) 看做最短路中的 \(dis\) 数组,上面的式子就是在图上连一条从 \(u\)\(v\) 边权是 \(1\) 的边,由于边权都是 \(1\),所以可以直接用 \(\text{bfs}\) 做.

然后考虑如何构造使得每个数 \(i\) 都能出现 \(f_i\) 次,设 \(S_i\) 为所有 \(f_j = i\)\(j\) 组成的集合,\(k\)\(f_i\) 的最大值,那么:

\[[S_k,S_{k-1}],[S_k,S_{k-2},S_{k-1}],[S_k,S_{k-3},S_{k-2},S_{k-1}], \text{...} [S_kS_1,S_2,\text{...},S_k] \]

就是一个可以达到答案上限的方案.

2 总结

先求出答案的上限(下限),在构造一种方案来达到上限(下限).