NOI2019 序列
貌似直接考虑贪心(顺着加)相当困难,考虑费用流,大概就是开一条边允许 \(K - L\) 对点可以任意匹配,然后其他必须两两匹配,流 \(K\) 的最大权值。
注意到一个点有流了就无法撤回,因此问题就转化成只允许 \(K - L\) 组不匹配,每次增加一组权值最大的,贪心维护最优方案。
可以发现,可以任意流时一定任意流增量最大,否则有 2 类决策(增广路):
- 直接新匹配一组 A, B;
- A 选择一个对侧 B 已选的,然后 B 任选一个,B 中选一个是对称的;
其他情况(如匹配两对)可以上述情况包含。维护好当前的状态最少需要多少条“任意边”,用堆维护一些最大值即可每次 \(O(\log n)\) 增广。