专栏文章

题解:qoj#1359 Setting Maps

个人记录参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@mip58gwg
此快照首次捕获于
2025/12/03 06:22
3 个月前
此快照最后确认于
2025/12/03 06:22
3 个月前
查看原文

题意简述

给定 nn 个点,mm 条边的简单有向图,每个点有点权 cic_i,并给出上面的两个点 s,t(st)s,t(s\neq t) 和一个正整数 KK
要求构造一个点集 SS,满足从 sstt 的任意一条路径中,至少有 KK 个点在 SS 中,且 SS 是所有这样的点集中 uScu\sum_{u\in S}c_u 最小的。
n200,m500,K5n\leq 200,m\leq 500, K\leq 5

解法

考虑 KK 等于 11 的情况,这是一个最小割点集问题,拆点转为割边后求最小割即可。
对于 KK 更大的情况,考虑类似建图。
现在一条路径要被“割 KK 次”,那么将图复制 KK 层,点 xxii 层入点记为 xi+x_i^+,出点记为 xix_i^-
对于每个 xx,连边 (xi+,xi,cx),(xi+,xi+1,+)(x_i^+,x_i^-,c_x),(x_i^+,x_{i+1}^-,+\infin)。对于每条原图上的边 (x,y)(x,y),连边 (xi,yi+,+)(x_i^-,y_i^+,+\infin)。如果某个 (xi+,xi,cx)(x_i^+,x_i^-,c_x) 在最小割中,则 xx 选入点集 SS 中。这样可以发现,对于任意一条原图上 sstt 的路径,如果在 SS 中的点少于 KK 个,必然存在一条从 s1+s_1^+tKt_K^- 的路径。
这个建图的问题是,一个点 xx 如果被选入点集,理应同时割去所有 (xi+,xi)(x_i^+,x_i^-),只需要 cxc_x 的代价,而不是当作 KK 条边选入最小割,也就是需要说明在最小割中每个 xx 只存在一个 (xi+,xi)(x_i^+,x_i^-) 被割去。
对于固定的点集 SS,设 fxf_xssxx 的所有路径上(不包括 xx)最少有多少个点在 SS 中,gxg_xxxtt 的所有路径上(不包括 xx)最少有多少个点在 SS 中。那么对于 xSx\in S,要求 fx+gx+1Kf_x+g_x+1\geq K。也就是说,只需要考虑 ssxx 且上面恰有 fxf_x 个点在 SS 中(不包括 xx)的路径(因为对于其他路径,即使当作 xSx\notin S 也满足要求),那么对应到上面的最小割中,只需要割去 (xfx+,xfx)(x_{f_x}^+,x_{f_x}^-) 这一条边即可。
使用 Dinic 算法求最大流,总复杂度 O((nk)2m)O((nk)^2m),实际上相当快。

评论

0 条评论,欢迎与作者交流。

正在加载评论...