2018.06.26 Dominator Tree--支配树
在学习支配树之前,请保证已经会写lca(tarian求法)
简介
支配树是什么?支配树能干什么?
- 对于一个DAG" role="presentation" style="position: relative;">DAGDAG上的每个点w" role="presentation" style="position: relative;">ww,都存在点d" role="presentation" style="position: relative;">dd满足去掉d" role="presentation" style="position: relative;">dd之后起点无法到达w" role="presentation" style="position: relative;">ww,我们称作d" role="presentation" style="position: relative;">dd支配w" role="presentation" style="position: relative;">ww,d" role="presentation" style="position: relative;">dd是w" role="presentation" style="position: relative;">ww的一个支配点。T" role="presentation" style="position: relative;">TT中节点u" role="presentation" style="position: relative;">uu是u" role="presentation" style="position: relative;">uu子树中所有节点的支配点(必经点),
- 支配w" role="presentation" style="position: relative;">ww的点可以有多个,但是至少会有一个。显然,对于起点以外的点,它们都有两个平凡的支配点,一个是自己,一个是起点。
- 在支配w" role="presentation" style="position: relative;">ww的点中,如果一个支配点i≠wi≠w" role="presentation" style="position: relative;">i≠wi≠wi≠wi≠w满足i" role="presentation" style="position: relative;">ii被w" role="presentation" style="position: relative;">ww剩下的所有非平凡支配点支配,则这个i" role="presentation" style="position: relative;">ii称作w" role="presentation" style="position: relative;">ww的最近支配点(immediatedominator)" role="presentation" style="position: relative;">(immediatedominator)(immediatedominator),记作idom(w)" role="presentation" style="position: relative;">idom(w)idom(w)。
如果我们把图的起点称作s" role="presentation" style="position: relative;">ss,那么除s" role="presentation" style="position: relative;">ss以外每个点均存在唯一的idom" role="presentation" style="position: relative;">idomidom。于是,连上所有r" role="presentation" style="position: relative;">rr以外的idom(w)→widom(w)→w" role="presentation" style="position: relative;">idom(w)→widom(w)→widom(w)→widom(w)→w的边,就能得到一棵树,其中每个点支配它子树中的所有点,它就是支配树。
下面我们来考虑一个问题:给定一个起点s" role="presentation" style="position: relative;">ss和一个终点t" role="presentation" style="position: relative;">tt,询问删掉哪些点能够使s" role="presentation" style="position: relative;">ss无法到达t" role="presentation" style="position: relative;">tt。
不难发现,支配点与割点并不相同,我们可以用某位大佬的图证明这一观点
显然在这种情况中即使我们割掉割点依然能使s" role="presentation" style="position: relative;">ss走到t" role="presentation" style="position: relative;">tt点。所以我们没有办法使用割点来解决这个问题。
那么我们如何处理这个问题呢???
如果该DAG" role="presentation" style="position: relative;">DAGDAG是一棵树,那没什么好说的,显然有fa[u]==idom[u]" role="presentation" style="position: relative;">fa[u]==idom[u]fa[u]==idom[u],那么路径s−>v" role="presentation" style="position: relative;">s−>vs−>v上的点都应该是支配点,直接O(n)" role="presentation" style="position: relative;">O(n)O(n)解决了
如果不是树该肿么办?我们考虑用拓扑序建立支配树:
由于我们是根据拓扑序来进行处理的那么当我们处理到第i" role="presentation" style="position: relative;">ii个节点u" role="presentation" style="position: relative;">uu时,第1" role="presentation" style="position: relative;">11~i+1" role="presentation" style="position: relative;">i+1i+1个节点显然已经处理完了,对于所有能够直接到达点u" role="presentation" style="position: relative;">uu的节点,我们求出它们在支配树上的lca" role="presentation" style="position: relative;">lcalca v" role="presentation" style="position: relative;">vv,这个点v" role="presentation" style="position: relative;">vv就是点u" role="presentation" style="position: relative;">uu在支配树上的父亲。
如果使用倍增求lca" role="presentation" style="position: relative;">lcalca,那么O((n+m)log2n)" role="presentation" style="position: relative;">O((n+m)log2n)O((n+m)log2n)的时间内实现。
2018.06.26 Dominator Tree--支配树的更多相关文章
- 2018.06.26「TJOI2018」数学计算(线段树)
描述 小豆现在有一个数 xxx ,初始值为 111 . 小豆有 QQQ 次操作,操作有两种类型: 111 $ m$ : x=x×mx=x×mx=x×m ,输出 xxx modmodmod MMM : ...
- 2018.06.26 NOIP模拟 纪念碑(线段树+扫描线)
题解: 题目背景 SOURCE:NOIP2015−GDZSJNZXSOURCE:NOIP2015-GDZSJNZXSOURCE:NOIP2015−GDZSJNZX(难) 题目描述 2034203420 ...
- 2018.06.26 NOIP模拟 号码(数位dp)
题目背景 SOURCE:NOIP2015-GDZSJNZX(难) 题目描述 Mike 正在在忙碌地发着各种各样的的短信.旁边的同学 Tom 注意到,Mike 发出短信的接收方手机号码似乎都满足着特别的 ...
- 【2018.06.26NOIP模拟】T3节目parade 【支配树】*
[2018.06.26NOIP模拟]T3节目parade 题目描述 学校一年一度的学生艺术节开始啦!在这次的艺术节上总共有 N 个节目,并且总共也有 N 个舞台供大家表演.其中第 i 个节目的表演时间 ...
- 2018.06.27 NOIP模拟 节目(支配树+可持久化线段树)
题目背景 SOURCE:NOIP2015-GDZSJNZX(难) 题目描述 学校一年一度的学生艺术节开始啦!在这次的艺术节上总共有 N 个节目,并且总共也有 N 个舞台供大家表演.其中第 i 个节目的 ...
- 【2018.06.26NOIP模拟】T1纪念碑square 【线段树】*
[2018.06.26NOIP模拟]T1纪念碑square 题目描述 2034年,纪念中学决定修建校庆100周年纪念碑,作为杰出校友的你被找了过来,帮校方确定纪念碑的选址. 纪念中学的土地可以看作是一 ...
- 康复计划#4 快速构造支配树的Lengauer-Tarjan算法
本篇口胡写给我自己这样的老是证错东西的口胡选手 以及那些想学支配树,又不想啃论文原文的人- 大概会讲的东西是求支配树时需要用到的一些性质,以及构造支配树的算法实现- 最后讲一下把只有路径压缩的并查集卡 ...
- Java内存泄漏分析系列之七:使用MAT的Histogram和Dominator Tree定位溢出源
原文地址:http://www.javatang.com 基础概念 先列出几个基础的概念: Shallow Heap 和 Retained Heap Shallow Heap表示对象本身占用内存的大小 ...
- HDU.4694.Important Sisters(支配树)
HDU \(Description\) 给定一张简单有向图,起点为\(n\).对每个点求其支配点的编号和. \(n\leq 50000\). \(Solution\) 支配树. 还是有点小懵逼. 不管 ...
随机推荐
- 转Genymetion
http://www.cnblogs.com/rainboy2010/p/6387770.html 介绍 Genymotion是一款出色的跨平台的Android模拟器,具有容易安装和使用.运行速度快的 ...
- 微信小程序——过滤器的模拟
>> 编写wxs文件——filter.wxs //1. 价格格式化 function getPriceFormat(value) { return parseFloat(isNaN(val ...
- 【python】初识python
[命名规范] 模块名:小写字母,单词之间用_分割:例如:ad_stats.py 包名:和模块名一样 类名:单词首字母大写:例如:ConfigUtil 全局变量名:大写字母,单词之间用_分割:例如:NU ...
- 浅谈Java代理一:JDK动态代理-Proxy.newProxyInstance
浅谈Java代理一:JDK动态代理-Proxy.newProxyInstance java.lang.reflect.Proxy:该类用于动态生成代理类,只需传入目标接口.目标接口的类加载器以及Inv ...
- swift 关于didSet 和willSet赋值的注意点
1. 初始化赋值的时候都不会走这个的方法, 需要在创建结构体后或对象后,在赋值,此时才会走这个方法
- Java07-java语法基础(六)面向对象
Java07-java语法基础(六)面向对象 一.格式化输出 System.out.printf(“%格式字符”,输出项); 1.格式字符: d --->int.byte.short ld -- ...
- HR 常用事务代码
HR的键值权限查看: oosb 删除人员 : pu01 查看人员主数据:PA30 对人员进行入职.离职.调岗等基本操作:PA40 查看HR中的公式的意思:PE04 查看HR中的工资项:PE02 创建 ...
- golang 创建一个简单的广播echo服务器
package main; import ( "net" "fmt" "bufio" ) //里面的代码部分参考cmu440课程 //htt ...
- 当时钟事件声明为过程变量 让system.threading.timer时钟失效
这个项目的小模块就是画label 控件到tablepayoutpanel表单 之中, 中间用到了时钟,事件(带返回值的),哈希表 .由于时钟定义在 form1的启动构造函数中导致了form1,启动完毕 ...
- laravel框架数据迁移
迁移就像数据库的版本控制,允许团队简单轻松的编辑并共享应用的数据库表结构,迁移通常和Laravel 的 schema 构建器结对从而可以很容易地构建应用的数据库表结构.如果你曾经告知小组成员需要手动添 ...