Almost Permutation 题解

传送门

看到数据范围直接考虑费用流。

首先直接预处理出每个数的上界和下界,若上界 \(<\) 下界直接特判 \(-1\)。然后考虑构建二分图,左部点为 \(n\) 个点代表这 \(n\) 个数,即第 \(i\) 的点代表第 \(i\) 个数;右部点为 \(n\) 个点代表值域,即第 \(i+n\) 个点代表 \(i\) 值。

将源点向每个左部点连容量 \(1\) 费用 \(0\) 的边,将每个左部点向其上下界范围内的右部点连容量 \(0\) 费用 \(1\) 的边。

最后要将右部点向汇点连边,但是观察到每条(右部点向汇点连的)边的费用和其流量有关系,所以我们考虑拆边,将每个右部点向汇点练的边拆为 \(n\) 条边,每条边容量为 \(1\),费用为 \(x^2-(x-1)^2=2x-1\)

posted @ 2023-08-06 19:15  Pwtking  阅读(9)  评论(0)    收藏  举报