【学习笔记】支配树

前言

萌新刚开始学图论入门,今天来学习一下支配树(灭绝树)这个东西。有问题请指出啊。

支配与支配点

在一张有向图 \(G\) 中,对于任意两个点 \(u\), \(v\),若从起点 \(s\) 出发到达顶点 \(v\) 的所有路径都需要经过顶点 \(u\),则称顶点 \(u\) 支配顶点 \(v\)\(u\)\(v\) 的支配点)。特别地,每个顶点支配其自身。

另一种更形象的定义是,\(u\) 被删除后,\(s\) 无法到达 \(v\),则称顶点 \(u\) 支配顶点 \(v\)\(u\)\(v\) 的支配点)。

很显然这两种定义是等价的。

支配树

对于非根节点 \(x\),设距离 \(x\) 最近的支配点为 \(y\),那么从 \(y\)\(x\) 连一条有向边。形成的树叫做支配树。

支配树最明显的性质:在支配树上,从 \(s\) 走向任意一点 \(u\) 所路过的所有点就是 \(u\) 的支配点。

树的支配树

对于一棵树来说,它本身就是自己的支配树。

DAG 的支配树

我们需要做的,是对于任意非根节点 \(u\),找到它的最近支配点。

由于是 DAG,考虑先对其进行拓扑排序。接下来按照拓扑序建树。

我们假设考虑到节点 \(u\),即拓扑序在 \(u\) 之前的节点已经建好了支配树。

我们找到所有存在边 \(v\to u\) 的节点 \(v\),我们的任务变成了从 \(s\) 到达所有 \(v\) 中的必经点。这个时候会发现,如果我们找到所有 \(v\) 在支配树上的 \(\text{LCA}\),这个点就是我们要求的 \(u\) 的最近支配点。这一点可以画个图理解。

\(\text{LCA}\) 可以用倍增求出。

注意,需要反向建边才能找到所有 \(v\to u\)

  • P2597 [ZJOI2012]灾难

    模板题。先拓扑,把所有生产者连向一个超级源点 \(s\),然后建出支配树,输出 \(size\) 即可。

  • CF757F Team Rocket Rises Again

    先跑最短路,建出最短路图。由于最短路图是个 DAG,然后和上题一样即可。

一般有向图的支配树

先咕着。

posted @ 2021-06-11 22:34  Little09  阅读(405)  评论(1)    收藏  举报