题意:一个三元组序列$(A_i, B_i, C_i)$,求删掉若干项,使剩下项关于$A_i$的最长上升子序列长度减少1,并使得删去项$B_i$之和最小。输出最小值以及删去项按$C_i$排序后的字典序最小的方案。
这道题如果不输出方案,那么就是一个最小割。首先每一项拆成两个点,中间连权值为删去费用$B_i$的边。将每一项按照$A_i$的dp关系,$A_i < A_j$ 且 $dp_i + 1 = dp_j$ ,即i能转移到j,则i向j连INF边。$dp_i = 1$的由原点向i连INF边,$dp_i = Max$的由i向汇点连INF边。最小割就是答案。
输出方案的话,我们考虑所有最大流之后满流且两端点互不可达的边,只有这些边可能且一定在最小割的某个可行方案中。因为要求字典序最小,我们便从最小的边开始枚举起。枚举到一条边满足条件后,便贪心地加入答案,并且去掉这条边的影响。即该边被割后,其他一些边就没有必要割了,这些边就要排除在条件之外。
怎么排除?退流。例如我们选中一条边$(u, v)$,我们由汇至v,u至源分别再跑一遍网络流,就可以退掉与$(u, v)$相关的流。相当于在原图中没有出现过$(u, v)$这条边,这时还需要割的边再继续考虑下去即可。