专栏文章

题解:P6898 [ICPC 2014 WF] Metal Processing Plant

P6898题解参与者 2已保存评论 2

文章操作

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

当前评论
2 条
当前快照
1 份
快照标识符
@minqtxsn
此快照首次捕获于
2025/12/02 06:51
3 个月前
此快照最后确认于
2025/12/02 06:51
3 个月前
查看原文
写一个非常简洁的 O(n3)O(n^3) 做法。
考虑钦定 D(A)D(B)D(A)\ge D(B),然后我们从大到小枚举 D(A)D(A),并尝试找出最小的合法的 D(B)D(B)
确定了一个 D(A)D(A) 之后,判断一个 D(B)D(B) 是否合法的方式是通过 2-sat,相当按照边权从大到小的顺序加入限制 xByAx\in B\rightarrow y\in A 直到某一时刻 2-sat 无解,无解时加入的边的边权就是 D(B)D(B) 的最小值。
于是这其实相当于一个最大瓶颈路问题(最大化路径上边权的最小值)。
然后我们直接维护 di,jd_{i,j} 表示 iijj 路径上边权的最小值的最大值(注意这里的图是 2-sat 图即每个点拆成两半的图,初始时图中有所有形如 xByAx\in B\rightarrow y\in A 的边)。现在我们从大到小枚举 D(A)D(A),每次只需要加入一个形如 xAyBx\in A\rightarrow y\in B 的限制,然后可以 O(n2)O(n^2) 地更新整个 dd 数组。
然后有一个众所周知的事实就是只有 O(n)O(n)D(A)D(A) 是有用的,我们发现我们其实也只需要加入 O(n)O(n) 条形如 xAyBx\in A\rightarrow y\in B 的限制,于是复杂度就是 O(n3)O(n^3) 的。

评论

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

正在加载评论...