标签:算法 字典 比赛 常用方法 最长上升子序列 bfs 方案 网络 数据
比赛的时候想不出来 还是太菜了 把建图想复杂了。。
其实 看到第一问的时候 数据范围:提示网络流。题意删除几个点使得最长上升子序列至少减小1->删除几个点减小1 提示算法:网络流。。
考虑如何建图 我们虽然知道怎么判断LIS的关键点和非关键点 但我们很难利用其建图。
互相影响的点为并联 影响的点串联 然后就是 刚才的说法都是从关键点上考虑的。
实际建图其实不必考虑那么复杂度 我们按照dp值建图即可,前一个连到后一个。可以看出 这个做法 从关键点层面上看 是完全符合的。
考虑一下第二问 也是最核心的问题。
求出 一组方案使得方案的代价最小的同时第二关键字排序后的字典序最小。(第二关键字互不相同。
我们容易求出最小代价 但是如何满足第二关键字字典序最小?
这联系到割边的问题。真让我头疼,每次都是割边。。
割边:满流的不一定是割边,割边一定是满流的。再解释一遍:满流的真不一定是割边 可能一条增广路径上都是满流的边 你随便割一条就是最小割。
割边一定是满流的 如果不满流你还割掉了 那么必然还会再割其他边 这样割掉的边的代价之和是大于最大流的。
割边的可行性:满流 u v不再同一个强连通分量重。割边的必要性:满流 u和S在一个SCC中 v和T在一个SCC中。
证明很显然 这里不再赘述。如何构造一组割集。常用方法 从S到T 跑一边bfs 能到的点标记。那么一组割集为:能到的点和不能到的点的边。
证明:显然这些边是满流的 割掉他们代价等于最大流所以成立。
但是值得注意的是 不止这一组 这就是我们这道题中毒瘤所在 要求字典序最小。
不难想出 判断第二关键字最小的边是否为可行割边如果是那就割掉。
我们逐一构造。。
判断能否增广 bfs暴力即可。
考虑删掉之后怎么做 显然删掉之后我们要保证一下对其他边的影响 和它有等效效果的边 自然是有S到u 和 v到T路径之间的边会受到影响dinic跑一发推流即可。
第一次遇到输出方案这么精辟的题目 要记录下来 好了割边的很多性质在上文中我都总结的差不多了。走人。
标签:算法 字典 比赛 常用方法 最长上升子序列 bfs 方案 网络 数据
原文地址:https://www.cnblogs.com/chdy/p/12346519.html