MENU

Kameda's Algorithm / 平面 DAG 上的可达性

Kameda's Algorithm 用于解决平面 DAG 上的可达性问题。

该平面 DAG 需要满足:所有 0 入度点和所有 0 出度点在平面图的同一个面上,通常它们应该都在无界面上,并且存在一种分割该面的方式,使得所有 0 入度点属于一个部分,而所有 0 出度点属于另一个部分。

在算法的最开始,我们在图上创建一个超级源点 $s$ 和一个超级汇点 $t$,并将 $s$ 向所有 0 入度点连边,将所有 0 出度点向 $t$ 连边。由于该平面图满足之前提到的性质,在这步操作中,我们一定能维持图的平面性。

接下来,从 $s$ 开始 DFS,按顺时针方向访问每个点的出边,并记录出栈序(这里与算法原本的描述恰好相反)。然后再做一遍相同的 DFS,只不过这一次按逆时针方向访问每个点的出边,同样记录下出栈序。

这样,每个点都拥有了两个编号 $(a_u, b_u)$。我们断言,在这张平面 DAG 上,$u$ 可以到达 $v$ 当且仅当 $a_u\ge a_v$ 且 $b_u \ge b_v$。这一条件的必要性显然,我们考虑充分性的逆否命题,也即若 $u,v$ 间没有可达关系,则 $a_u<a_v$ 或 $b_u<b_v$,由于我们在两次 DFS 中采用了相反的访问出边的顺序,$u,v$ 在两次 DFS 中必然拥有不同的访问顺序。这样就简要的提供了证明。

这样我们就可以在 $O(n\log n)$ 或 $O(n)$ 的时间复杂度内,取决于你是否需要对点的出边进行排序,将平面 DAG 上的可达性问题转化为二维偏序,从而 $O(1)$ 回答查询,或者解决更加复杂的问题。

Archives Tip
QR Code for this page
Tipping QR Code
Leave a Comment

2 Comments
  1. 2025年10月新盘 做第一批吃螃蟹的人coinsrore.com

  2. 2025年10月新盘 做第一批吃螃蟹的人coinsrore.com
    新车新盘 嘎嘎稳 嘎嘎靠谱coinsrore.com
    新车首发,新的一年,只带想赚米的人coinsrore.com
    新盘 上车集合 留下 我要发发 立马进裙coinsrore.com
    做了几十年的项目 我总结了最好的一个盘(纯干货)coinsrore.com
    新车上路,只带前10个人coinsrore.com
    新盘首开 新盘首开 征召客户!!!coinsrore.com
    新项目准备上线,寻找志同道合 的合作伙伴coinsrore.com
    新车即将上线 真正的项目,期待你的参与coinsrore.com
    新盘新项目,不再等待,现在就是最佳上车机会!coinsrore.com
    新盘新盘 这个月刚上新盘 新车第一个吃螃蟹!coinsrore.com