CF1383F

CF1383F

给定一张 \(n\) 个点 \(m\) 条边的无向图 \(G\),给定 \(k\) 条特殊边,进行 \(q\) 次查询,每次给定这 \(k\) 条边的权值,查询这个状态下 \(1\to n\) 的最大流。

\(n,m\le 10^4,k\le 10,q\le 2\times 10^5\)

\(\rm Sol:\)

观察到最大流等于最小割,所以可以枚举这 \(k\) 条边被割/不被割,对于被割,将这条边的边权设为 \(0\),否则设为 \(\infty\)

然后跑最大流可以进行预处理,然后可以轻易的做到 \(\mathcal O(2^k)\) 进行查询,复杂度为 \(\mathcal O(2^k\cdot \textrm{maxflow}(n,m)+q\cdot 2^k)\)

事实上,可以预处理不含这 \(k\) 条边时的最大流的残量网络,然后每次在这个网络上增广即可,注意到插入的边权和很小,可以考虑采取 EK/FF 算法来解决此问题,复杂度为 \(\mathcal O(2^k\times wm)\)

然后由于 Hack 数据,转移的时候不能暴力加边,而是要枚举最小的 bit 转移过来。

然后这个题就做完了。FF 算法增广时要遇到 \(n\) 就 break,不然过不去。

posted @ 2020-09-11 19:05  Soulist  阅读(157)  评论(0编辑  收藏  举报