20240926:图论选做
Upgrading Cities
题意:给定一张 DAG,求关键点个数。点 \(u\) 是关键点当且仅当满足 \(u \to v\) 不连通且 \(v \to u\) 不连通的点 \(v\) 数量不大于 \(1\)。
考虑拓扑排序的过程。
一个很重要的性质:当前队列里所有点两两不连通,因为只有一个点出队他的后继点才可能入队。
还有 DAG 本身的性质:存在 \(u \to v\) 和存在 \(v \to u\) 至多满足其中一个,否则有环。
设当前队列为 \(Q\),取出队头 \(u\):
-
\(u\) 不能到达在他之前入队的点,只有一个点出队他的后继点才可能入队。
-
\(\vert Q\vert = 0\),剩下点都直接或间接与 \(u\) 相连。
-
\(\vert Q\vert \ge 2\),\(u\) 已经不可能产生条件了。
-
\(\vert Q\vert = 1\),设队列中仅剩元素为 \(v\)。对于剩下的点 \(w\),他至少能被 \(u, v\) 中的一个到达。
- 所有 \(w\) 能被 \(u\) 到达。
- 存在 \(w\) 不能被 \(u\) 到达,那么 \(v\) 能到达 \(w\)。条件等价于存在 \(\deg^- (w) = 1\) 且 \((v, w) \in E\)。
这个等价条件可以反证法推出。
如果存在 \(\deg^- (w) = 1\land(v, w) \in E\),显然 \(u\) 不能到达 \(w\),\(w\) 也不能到达 \(u\)(如果能到达 \(w\) 会在 \(u\) 之前入队)。
否则把 \(u, v\) 的边删去后所有新图的「源点」\(w\) 都与 \(u\) 有边相连,也就是说 \(u\) 能到达除 \(v\) 外的所有剩余点。
正反做一遍拓扑排序,时间复杂度 \(O(n + m)\)。submission

浙公网安备 33010602011771号