【学习笔记】支配树
前言
萌新刚开始学图论入门,今天来学习一下支配树(灭绝树)这个东西。有问题请指出啊。
支配与支配点
在一张有向图 \(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\)。
-
模板题。先拓扑,把所有生产者连向一个超级源点 \(s\),然后建出支配树,输出 \(size\) 即可。
-
CF757F Team Rocket Rises Again
先跑最短路,建出最短路图。由于最短路图是个 DAG,然后和上题一样即可。
一般有向图的支配树
先咕着。