写在前面


今天亮神花了一早上给讲了支配树,但由于今天网(没)速(人)不(跟)好(上),我们残忍地看了他一眼后掉线了,于是又用了一下午开流量重新联网并结合缓(课)存(件)学习。

注:本文在原文的基础上加上了作者本人理解,不好勿喷。

就由一道题引入吧。

题目


HDU4694 Important Sisters

简单题意:一个有nnn个点,m" role="presentation" style="position: relative;">mmm条边的有向图,以nnn为起点,若去掉点b" role="presentation" style="position: relative;">bbb,nnn就不能连到a" role="presentation" style="position: relative;">aaa,则称bbb是a" role="presentation" style="position: relative;">aaa的importantimportantimportant sistersistersister,求每个点的所有importantimportantimportant sistersistersister的编号和。

欸好,这题一看我就不会。

暴力O(n2∗(n+m))O(n2∗(n+m))O(n^2*(n+m)),所以我们需要一个更加优美的算法。进入正题~

定义新名词


支配:

在有向图中,固定起点rrr,若r" role="presentation" style="position: relative;">rrr~www的每一条路径都必定经过v" role="presentation" style="position: relative;">vvv且v≠wv≠wv \neq w,则vvv支配w" role="presentation" style="position: relative;">www。

最近支配点:

若vvv支配w" role="presentation" style="position: relative;">www,且www的其余支配点全都支配v" role="presentation" style="position: relative;">vvv,则称vvv是w" role="presentation" style="position: relative;">www的最近支配点,记 idom(w)=vidom(w)=vidom(w) = v。

如上图中,idom(a)=ridom(a)=ridom(a)=r ,idom(b)=aidom(b)=aidom(b)=a。

半支配点:

若在原图GGG中有点v" role="presentation" style="position: relative;">vvv,有一条路径 v=v0,v1,v2,...vk=wv=v0,v1,v2,...vk=wv = v_0,v_1,v_2,...v_k = w,使得 dfn[vi]>dfn[w]dfn[vi]>dfn[w]dfn[v_i] > dfn[w] 对于1<=i<=k−11<=i<=k−11 成立 (即不包括点vvv,w" role="presentation" style="position: relative;">www),则记 sdom(w)=min(v)sdom(w)=min(v)sdom(w) = min(v) 。

好,上面突然提到 dfndfndfn ,解释一下。到了支配树最恶心的地方了

定理、引理、推论及其证明


定理一(支配树定理)

除rrr外都有每个点都有唯一的 idom" role="presentation" style="position: relative;">idomidomidom,且不成环,故所有的 (idom(w),w)(idom(w),w)(idom(w),w) 边形成一棵树,vvv支配w" role="presentation" style="position: relative;">www当且仅当vvv是树中w" role="presentation" style="position: relative;">www的祖先,这棵树叫做支配树

有了这个定理,就可以发现 importantimportantimportant sisterssisterssisters 这个题目就是求解每个点在支配树上所有祖先的编号之和。只要求出支配树,问题就迎刃而解了。

引入算法

LengauerTarjanLengauerTarjanLengauer_Tarjan 算法: O(n∗α(n))O(n∗α(n))O(n*α(n)) 求出所有点的最近支配点,以及半支配点。(读作:兰高娃-塔儿尖算法)然后再等我证会儿再说

引理1(路径引理)

从rrr开始 dfs" role="presentation" style="position: relative;">dfsdfsdfs 整张图,按照 dfsdfsdfs序(即 dfndfndfn值)给结点重新编号,得到的树称为搜索树(即后文的TTT树)。

若 dfn[v]&lt;=dfn[w]" role="presentation" style="position: relative;">dfn[v]<=dfn[w]dfn[v]<=dfn[w]dfn[v] ,则 vvv~w" role="presentation" style="position: relative;">www 的任意路径都包含在它们在TTT树中的一个公共祖先

证明:

如图,结点标号即为其 dfn" role="presentation" style="position: relative;">dfndfndfn 值,黑边为树边,蓝边为原图边。

边(3,2)(3,2)(3,2)的两个端点属于rrr的不同子树(即u" role="presentation" style="position: relative;">uuu不是vvv的祖先,且v" role="presentation" style="position: relative;">vvv不是uuu的祖先),那么这样的边就叫做横叉边。

但是,根据 dfs" role="presentation" style="position: relative;">dfsdfsdfs 的顺序我们可以发现,如果原图有边(2,5)(2,5)(2,5),那么深搜时就会从222直接走向5" role="presentation" style="position: relative;">555,此时标号就会发生变化,故边(2,5)(2,5)(2,5)不存在。

由上可知,横叉边只从 dfndfndfn 值大的点连向 dfndfndfn 值小的点

因为题设中说 dfn[v]<=dfn[w]dfn[v]<=dfn[w]dfn[v] ,那么不存在从点vvv到点w" role="presentation" style="position: relative;">www,且不经过任何 dfn[i]<dfn[v]dfn[i]<dfn[v]dfn[i] 的点iii的路径,所以从v" role="presentation" style="position: relative;">vvv到www的路径中一定会经过一个dfn" role="presentation" style="position: relative;">dfndfndfn值小的点,即它们的一个公共祖先。

引理2

记 v+−>wv+−>wv+->w 表示vvv是w" role="presentation" style="position: relative;">www在TTT树中的祖先,且 v≠w" role="presentation" style="position: relative;">v≠wv≠wv \neq w (即完全祖先)。

记 v⋅−>wv·−>wv·->w 表示vvv是w" role="presentation" style="position: relative;">www在TTT树中的祖先,但允许 v=w" role="presentation" style="position: relative;">v=wv=wv=w 。

则有

idom(w)+−>widom(w)+−>widom(w)+->w

证明:

因为 idom(w)idom(w)idom(w) 在每一条rrr~w" role="presentation" style="position: relative;">www的路径上,那就必定在这一条树路径上,所以,必然有 idom(w)+−>widom(w)+−>widom(w)+->w 。

引理3

sdom(w)+−>wsdom(w)+−>wsdom(w)+->w

证明:

设www在T" role="presentation" style="position: relative;">TTT树中的父亲为 fa(w)fa(w)fa(w) ,则 (fa(w),w)(fa(w),w)(fa(w),w) 是原图GGG中的一条边。因 sdom" role="presentation" style="position: relative;">sdomsdomsdom 的定义,可以发现 fa(w)fa(w)fa(w) 符合要求,由 sdomsdomsdom 求的是最小的,那么至少可以有 sdom(w)=fa(w)sdom(w)=fa(w)sdom(w)=fa(w) ,故可得 sdom(w)<=fa(w)<wsdom(w)<=fa(w)<wsdom(w) 。(比较的是 dfndfndfn 值)

再有 sdomsdomsdom 的定义得,有一条路径 sdom(w)=v0,v1,v2,...,vk=wsdom(w)=v0,v1,v2,...,vk=wsdom(w)=v_0,v_1,v_2,...,v_k=w 使得 dfn[vi]>dfn[w]dfn[vi]>dfn[w]dfn[v_i]>dfn[w] 对于 1<=i<=k−11<=i<=k−11 成立。由引理1可知,因为 dfn[sdom(w)]<dfn[w]dfn[sdom(w)]<dfn[w]dfn[sdom(w)] ,路径上必有某一节点viviv_i是 sdom(w)sdom(w)sdom(w) 和www在T" role="presentation" style="position: relative;">TTT树中的公共祖先,即必然有 dfn[vi]<=dfn[sdom(w)]dfn[vi]<=dfn[sdom(w)]dfn[v_i] 。这意味着只有使 i=0i=0i=0,即 vi=sdom(w)vi=sdom(w)v_i=sdom(w) 才符合。

故有 sdom(w)sdom(w)sdom(w) 是 sdom(w)sdom(w)sdom(w) 和 www 的公共祖先,即 sdom(w)" role="presentation" style="position: relative;">sdom(w)sdom(w)sdom(w) 是 www 的完全祖先。

引理4

对于任意结点 w" role="presentation" style="position: relative;">www,w≠rw≠rw \neq r,idom(w)⋅−>sdom(w)idom(w)·−>sdom(w)idom(w)·->sdom(w) 。

证明:

由引理2、3得 idom(w)idom(w)idom(w) 和 sdom(w)sdom(w)sdom(w) 都是www的完全祖先。

用反证法,假定 sdom(w)·−&gt;idom(w)" role="presentation" style="position: relative;">sdom(w)⋅−>idom(w)sdom(w)·−>idom(w)sdom(w)·->idom(w) ,则 dfn[sdom(w)<dfn[idom(w)]dfn[sdom(w)<dfn[idom(w)]dfn[sdom(w) 。

我们在从rrr到 sdom(w)" role="presentation" style="position: relative;">sdom(w)sdom(w)sdom(w) 的路径后面接上 sdom(w)sdom(w)sdom(w) 中规定的路径 sdom(w)=v0,v1,v2,...,vk=wsdom(w)=v0,v1,v2,...,vk=wsdom(w)=v_0,v_1,v_2,...,v_k=w (见上图)。

这条从rrr到w" role="presentation" style="position: relative;">www的路径避开了TTT树中既是w" role="presentation" style="position: relative;">www的完全祖先,也是 sdom(w)sdom(w)sdom(w) 的完全后代(即不等于它自身的后代)的那些点(图中点222),那么我们假定的 idom(w)" role="presentation" style="position: relative;">idom(w)idom(w)idom(w) 就在这些点中。此时从rrr到w" role="presentation" style="position: relative;">www的路径没有全部经过点 idom(w)idom(w)idom(w) ,不符合 idomidomidom 的定义。

因此 idom(w)idom(w)idom(w) 不在这些点中,即 idom(w)idom(w)idom(w) 一定是 sdom(w)sdom(w)sdom(w) 的祖先。

引理5

若结点vvv,w" role="presentation" style="position: relative;">www满足 v⋅−>wv·−>wv·->w,则有 v⋅−>idom(w)v·−>idom(w)v·->idom(w) 或者 idom(w)⋅−>idom(v)idom(w)·−>idom(v)idom(w)·->idom(v) 。

证明:

设xxx是 idom(v)" role="presentation" style="position: relative;">idom(v)idom(v)idom(v) 的任意一个完全后代,且同时是vvv的完全祖先,则必然有一条从r" role="presentation" style="position: relative;">rrr到vvv不经过x" role="presentation" style="position: relative;">xxx的路径(若所有路径全都经过xxx,则应该 idom(v)=x" role="presentation" style="position: relative;">idom(v)=xidom(v)=xidom(v)=x,xxx不能是 idom(v)" role="presentation" style="position: relative;">idom(v)idom(v)idom(v) 的完全后代)。

将这条路径和从vvv到w" role="presentation" style="position: relative;">www在TTT树上的路径连接起来,就得到了一条从r" role="presentation" style="position: relative;">rrr到www不经过x" role="presentation" style="position: relative;">xxx的路径。

idom[w]idom[w]idom[w] 不能在 idom[v]idom[v]idom[v] 到 vvv 之间(这段之间的路径至少有两条),所以 idom[w]" role="presentation" style="position: relative;">idom[w]idom[w]idom[w] 要么是vvv的后代,要么是 idom[v]" role="presentation" style="position: relative;">idom[v]idom[v]idom[v] 的祖先。

v⋅−>idom(w)v·−>idom(w)v·->idom(w) 示例

idom(w)⋅−>idom(v)idom(w)·−>idom(v)idom(w)·->idom(v) 示例

好!重头戏来了~

定理2

设w≠rw≠rw \neq r,假设所有使得 sdom(w)+−>u⋅−>wsdom(w)+−>u·−>wsdom(w)+->u·->w 的所有uuu都满足 sdom(u)&gt;=sdom(w)" role="presentation" style="position: relative;">sdom(u)>=sdom(w)sdom(u)>=sdom(w)sdom(u)>=sdom(w) ,那么 idom(w)=sdom(w)idom(w)=sdom(w)idom(w)=sdom(w)。

证明:

由引理444: idom(w)·−&gt;sdom(w)" role="presentation" style="position: relative;">idom(w)⋅−>sdom(w)idom(w)·−>sdom(w)idom(w)·->sdom(w) 可得,我们只要证明了 sdom(w)sdom(w)sdom(w) 支配了www,那么就可以得到 idom(w)=sdom(w)" role="presentation" style="position: relative;">idom(w)=sdom(w)idom(w)=sdom(w)idom(w)=sdom(w)。

考虑任意一条从rrr到w" role="presentation" style="position: relative;">www的路径,记为ppp。设x" role="presentation" style="position: relative;">xxx为这条路径上最后一个满足 dfn[x]<dfn[sdom(w)]dfn[x]<dfn[sdom(w)]dfn[x] 的点。

分类讨论。若无此xxx,则有 sdom(w)=r" role="presentation" style="position: relative;">sdom(w)=rsdom(w)=rsdom(w)=r ,一定支配www。若有x" role="presentation" style="position: relative;">xxx,设yyy为这条路径上在x" role="presentation" style="position: relative;">xxx之后,满足 dfn[sdom(w)]⋅−>dfn[y]⋅−>dfn[w]dfn[sdom(w)]·−>dfn[y]·−>dfn[w]dfn[sdom(w)]·->dfn[y]·->dfn[w] 的第一个点。设路径 q=(x=v0,v1,v2,...,vk=y)q=(x=v0,v1,v2,...,vk=y)q=(x=v_0,v_1,v_2,...,v_k=y) 是路径ppp中从x" role="presentation" style="position: relative;">xxx到yyy的部分。(如图)

(点a" role="presentation" style="position: relative;">aaa只是用来体现 sdom(w)sdom(w)sdom(w) 的,不要在意)

我们断言:对于 1<=i<=k−11<=i<=k−11 均满足 dfn[vi]>dfn[y]dfn[vi]>dfn[y]dfn[v_i]>dfn[y] 。

继续大力反证法,我们假定存在有一个iii使得 dfn[vi]&lt;dfn[y]" role="presentation" style="position: relative;">dfn[vi]<dfn[y]dfn[vi]<dfn[y]dfn[v_i] 。由引理一得,应当有某个jjj满足 i&lt;=j&lt;=k−1" role="presentation" style="position: relative;">i<=j<=k−1i<=j<=k−1i 且点 vjvjv_j 是点 viviv_i 和 yyy 的公共祖先(即vj·−&gt;j" role="presentation" style="position: relative;">vj⋅−>jvj·−>jv_j·->j)。根据xxx的选择方式:路径上 dfn[x]&lt;dfn[sedom(w)]" role="presentation" style="position: relative;">dfn[x]<dfn[sedom(w)]dfn[x]<dfn[sedom(w)]dfn[x] 的最后一点,又因为 vjvjv_j 在路径上xxx的后方,那么一定有 dfn[vj]&gt;=dfn[sdom(w)]" role="presentation" style="position: relative;">dfn[vj]>=dfn[sdom(w)]dfn[vj]>=dfn[sdom(w)]dfn[v_j]>=dfn[sdom(w)] (即 sdom(w)⋅−>vjsdom(w)·−>vjsdom(w)·->v_j )。综合式子,则有 sdom(w)⋅−>vj⋅−>y⋅−>wsdom(w)·−>vj·−>y·−>wsdom(w)·->v_j·->y·->w 。此时 yyy 就不符合是第一个点这个选择条件了。断言证毕。

由 x+−&gt;y" role="presentation" style="position: relative;">x+−>yx+−>yx+->y 结合我们对半支配点 sdom(y)+−>ysdom(y)+−>ysdom(y)+->y 的证明,可以得出 dfn[sdom(y)]<=dfn[x]dfn[sdom(y)]<=dfn[x]dfn[sdom(y)] (最多可以为xxx)。再联系x" role="presentation" style="position: relative;">xxx选择方式,得 dfn[sdom(y)]<=dfn[x]<dfn[sdom(w)]dfn[sdom(y)]<=dfn[x]<dfn[sdom(w)]dfn[sdom(y)] 。

再根据断言和点 sdom(w)sdom(w)sdom(w) 一定在路径qqq上,若 y≠sdom(w)" role="presentation" style="position: relative;">y≠sdom(w)y≠sdom(w)y \neq sdom(w) 那么点 sdom(y)sdom(y)sdom(y) 就应当和点 sdom(w)sdom(w)sdom(w) 重合,不满足 dfn[sdom(y)]<dfn[sdom(w)]dfn[sdom(y)]<dfn[sdom(w)]dfn[sdom(y)] 的条件,因此 y=sdom(w)y=sdom(w)y=sdom(w) ,且点 sdom(w)sdom(w)sdom(w) 必在路径ppp上。由于路径p" role="presentation" style="position: relative;">ppp是任意的,故 sdom(w)sdom(w)sdom(w) 支配了www。证毕。

定理3

若有点 w≠r" role="presentation" style="position: relative;">w≠rw≠rw \neq r ,uuu是所有满足 sdom(w)+−&gt;u·−&gt;w" role="presentation" style="position: relative;">sdom(w)+−>u⋅−>wsdom(w)+−>u·−>wsdom(w)+->u·->w 的节点中 sdom(u)sdom(u)sdom(u) 最小的那个,那么 sdom(u)<=sdom(w)sdom(u)<=sdom(w)sdom(u) ,且 idom(u)=idom(w)idom(u)=idom(w)idom(u)=idom(w) 。

证明:

因为至少可以使 u=wu=wu=w ,所以很容易就可以发现 sdom(u)<=sdom(w)sdom(u)<=sdom(w)sdom(u) 。

由引理四 idom(w)idom(w)idom(w) 是 sdom(w)sdom(w)sdom(w) 的祖先,因此 idom(w)idom(w)idom(w) 也是uuu的完全祖先。

因为 u·−&gt;w" role="presentation" style="position: relative;">u⋅−>wu·−>wu·->w,再由引理五可知,只能使 idom(w)⋅−>idom(u)idom(w)·−>idom(u)idom(w)·->idom(u) 。为了证明 idom(u)=idom(w)idom(u)=idom(w)idom(u)=idom(w) ,就应当证明点 idom(u)idom(u)idom(u) 就可以支配www。

考虑任意一条从r" role="presentation" style="position: relative;">rrr到www的路径p" role="presentation" style="position: relative;">ppp,设点xxx是路径中最后一个满足 dfn[x]&lt;dfn[idom(u)]" role="presentation" style="position: relative;">dfn[x]<dfn[idom(u)]dfn[x]<dfn[idom(u)]dfn[x]。

基本同定理二的证明思路,如果没有符合要求的点xxx,则有 idom(u)=r" role="presentation" style="position: relative;">idom(u)=ridom(u)=ridom(u)=r 必然支配www。否则,设点y" role="presentation" style="position: relative;">yyy是路径上xxx后满足 idom(u)·−&gt;y·−&gt;w" role="presentation" style="position: relative;">idom(u)⋅−>y⋅−>widom(u)·−>y·−>widom(u)·->y·->w 的第一个点,设路径 q=(x=v0,vq,v2,...vk=y)q=(x=v0,vq,v2,...vk=y)q=(x=v_0,v_q,v_2,...v_k=y) 是路径ppp中从x" role="presentation" style="position: relative;">xxx到yyy的一部分。同理可证,dfn[sdom(y)]&lt;=dfn[x]" role="presentation" style="position: relative;">dfn[sdom(y)]<=dfn[x]dfn[sdom(y)]<=dfn[x]dfn[sdom(y)] 。再由引理四 idom(u)⋅−>sdom(u)idom(u)·−>sdom(u)idom(u)·->sdom(u) 得 dfn[idom(u)]<=dfn[sdom(u)]dfn[idom(u)]<=dfn[sdom(u)]dfn[idom(u)] ,结合所有式子得 dfn[sdom(y)]<=dfn[x]>dfn[idom(u)]>=dfn[sdom(u)]dfn[sdom(y)]<=dfn[x]>dfn[idom(u)]>=dfn[sdom(u)]dfn[sdom(y)]dfn[idom(u)]>=dfn[sdom(u)] 。

由uuu的选择方式得,为了使u" role="presentation" style="position: relative;">uuu是 dfndfndfn 最小的点,yyy不可能是 sdom(w)" role="presentation" style="position: relative;">sdom(w)sdom(w)sdom(w) 的完全后代,y+−>uy+−>uy+->u。

假若yyy是u" role="presentation" style="position: relative;">uuu的祖先,也是 idom(u)idom(u)idom(u) 的完全后代。我们在rrr到sdom(y)" role="presentation" style="position: relative;">sdom(y)sdom(y)sdom(y)的树上路径后接上使 sdom(y)sdom(y)sdom(y) 成立的那条路径 (sdom(y)=v0,v1,v2,...,vk=ysdom(y)=v0,v1,v2,...,vk=ysdom(y)=v_0,v_1,v_2,...,v_k=y 其中对于 1<=i<k1<=i<k1 均满足 dfn[vi]>dfn[y]dfn[vi]>dfn[y]dfn[v_i]>dfn[y]),再接上从yyy到u" role="presentation" style="position: relative;">uuu的树上路径,就形成了一条从rrr到u" role="presentation" style="position: relative;">uuu而不经过 idom(u)idom(u)idom(u) 的路径,矛盾,故不可能yyy既是u" role="presentation" style="position: relative;">uuu的祖先,又是 #idom(u)$ 的完全后代。

由于 idom(u)⋅−>y+−>u⋅−>widom(u)·−>y+−>u·−>widom(u)·->y+->u·->w ,且 idom(u)⋅−>y⋅−>widom(u)·−>y·−>widom(u)·->y·->w ,只能使 y=idom(u)y=idom(u)y=idom(u) (其实证法和定理二的证明基本一样)。因此, idom(u)idom(u)idom(u)(即yyy)在从r" role="presentation" style="position: relative;">rrr到www的任意一条路径上,故 idom(u)" role="presentation" style="position: relative;">idom(u)idom(u)idom(u) 支配www。证毕~(不想配图了qwq)

对比定理二,我们可以发现,使定理二中所有使得 sdom(w)+−&gt;u·−&gt;w" role="presentation" style="position: relative;">sdom(w)+−>u⋅−>wsdom(w)+−>u·−>wsdom(w)+->u·->w 的uuu都满足 sdom(u)&gt;=sdom(w)" role="presentation" style="position: relative;">sdom(u)>=sdom(w)sdom(u)>=sdom(w)sdom(u)>=sdom(w) ,即使 dfn[sdom(u)]dfn[sdom(u)]dfn[sdom(u)] 最小的点uuu满足 sdom(u)&gt;=sdom(w)" role="presentation" style="position: relative;">sdom(u)>=sdom(w)sdom(u)>=sdom(w)sdom(u)>=sdom(w) ,又因为定理三中 dfn[sdom(u)]dfn[sdom(u)]dfn[sdom(u)] 最小的点uuu满足 sdom(u)&lt;=sdom(w)" role="presentation" style="position: relative;">sdom(u)<=sdom(w)sdom(u)<=sdom(w)sdom(u)。二者均成立时只能取等,故可将定理二变为:

设w≠rw≠rw \neq r,假设所有使得 sdom(w)+−>u⋅−>wsdom(w)+−>u·−>wsdom(w)+->u·->w 的所有uuu都满足 sdom(u)=sdom(w)" role="presentation" style="position: relative;">sdom(u)=sdom(w)sdom(u)=sdom(w)sdom(u)=sdom(w) ,那么 idom(w)=sdom(w)idom(w)=sdom(w)idom(w)=sdom(w)。

推论

设 w≠rw≠rw \neq r ,uuu是所有满足 sdom(w)+−&gt;u·−&gt;w" role="presentation" style="position: relative;">sdom(w)+−>u⋅−>wsdom(w)+−>u·−>wsdom(w)+->u·->w 的节点中 sdom(u)sdom(u)sdom(u)的最小者,那么成立:
1、若 sdom(u)=sdom(w)sdom(u)=sdom(w)sdom(u)=sdom(w) ,则 idom(w)=sdom(w)idom(w)=sdom(w)idom(w)=sdom(w)。
2、否则(即 sdom(u)<sdom(w)sdom(u)<sdom(w)sdom(u)),idom(w)=idom(u)idom(w)=idom(u)idom(w)=idom(u)。

这个推论基本就是定理二、三的一个整合,这个推论可以使我们由 sdomsdomsdom 推到 idomidomidom,最后就要看怎么得到 sdomsdomsdom 了。

挖坑代填……

支配树 Dominator Tree相关推荐

  1. Memory Analyzer Tool 1 Shallow heap Retained heap dominator tree(控制树)

    文章目录 1. shallow heap 2. retained heap 3. dominator tree(控制树) 1. shallow heap 引用原文介绍 :Shallow heap is ...

  2. 有向图的必经点,支配树

    支配树的背景 流程图 食物链 GC 场景 DAG 上求支配树 树上倍增 模板: P2597 灾难 一般有向图上求支配树 Lengauer-Tarjan 算法 模板: P5180 [模板]支配树 $0 ...

  3. 第26课:MAT中的Dominator Tree与Retained Set详解

    内容: 1.Dominator Tree与Retained Set         2.Dominator Tree详解 一.Dominator Tree与Retained Set Retained ...

  4. [支配树][lca][倍增][线段树][拓扑] Jzoj P4240 游行

    Description 恶梦是学校里面的学生会主席.他今天非常的兴奋,因为学校一年一度的学生节开始啦!! 在这次节日上总共有N个节目,并且总共也有N个舞台供大家表演.其中第i个节目的表演时间为第i个单 ...

  5. 使用行为树(Behavior Tree)实现网游奖励掉落系统

    原地址:http://blog.csdn.net/akara/article/details/6165421 [原创]使用行为树(Behavior Tree)实现网游奖励掉落系统 by AKara 2 ...

  6. hihocoder #1343 : Stable Members(支配树)

    时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 Recently Little Hi joined an algorithm learning group. The gr ...

  7. 数据结构与算法(C++)– 树(Tree)

    数据结构与算法(C++)– 树(Tree) 1.树的基础知识 树(tree): 一些节点的集合,可以为空集 子树(sub tree): 树的子集 根(root): 树的第一个节点 孩子和父亲(Chil ...

  8. C语言实现段树segment tree(附完整源码)

    C语言实现段树segment tree 段树结构体定义 实现以下6个接口 完整实现和main测试源码 段树结构体定义 typedef struct segment_tree {void *root; ...

  9. 看动画学算法系列之:后缀树suffix tree

    文章目录 简介 字典树Trie 压缩字典树 后缀树Suffix Tree 后缀树的搜索 查找最长重复子字符串 查找两个字符串的最长公共子字符串 后缀树的代码实现 简介 模式匹配是一个在工作中经常会用到 ...

  10. 【学习笔记】DAG / 一般有向图的支配树 / 灭绝树

    定义与声明 一个有向图 GGG.给定一个起点 sss,假设 sss 能到达所有点. 若去掉某个点 iii 后,sss 无法到达 jjj,则称 iii 为 jjj 的支配点. 显然支配点存在传递关系. ...

最新文章

  1. python的变量对大小写并不敏感_Robot Framework 内置变量
  2. 程序员级别鉴定书(.NET面试问答集锦)
  3. UML 类图. 对象图. 接口图. 用例图 .包,参与者. 依赖关系. 泛化/继承关系. 关联关系 .聚合/聚集关系. 实现关系 组合关系。
  4. Android 中加载网络资源时的优化 缓存和异步机制
  5. Bringing up interface eth0: Device eth0 does not seem to be present, delaying initialization
  6. 如何在 5 分钟内读懂区块链的架构思维?
  7. linux学习手册,Linux命令学习手册-ps
  8. Anatomy of a Flink Program(Flink程序的剖析)
  9. 输出100以内所有的质数
  10. 家用nas的过去现在和未来--2008n年
  11. mysql.5.7 declare_MySQL-5.7 游标及DECLARE
  12. 堆(Heap)数据结构
  13. matlab拟合函数导出,excel里曲线拟合的公式怎么导出?()
  14. SQL Server 中导入外部数据库文件
  15. 中国科学院大学2019年高等代数考研试题
  16. UML在软件开发过程中的应用
  17. 容迟网络中的路由算法笔记(二)
  18. 分享AI前端硬件识别4G摄像头模组方案
  19. 显示器支架什么品牌好?
  20. nordic 52832中添加RTT打印

热门文章

  1. 如何修改网页视频播放倍速?(最高16倍速)
  2. Microsoft office 2013安装图解
  3. c语言日历程序 带农历,一个完整的日历(含有农历)
  4. Python- sklearn之最小二乘法
  5. GridView自带分页 1/总页数 首页 下一页 上一页 尾页 X 页 go 实现方法
  6. AD831混频器模块
  7. 编译android版本protobuf
  8. AD中使用Net Label时,编译时为什么总是Floating。出现的原因。
  9. vs code进行c/c++开发
  10. 计算几何(圆相关模板) - 2D Geometry 110 in 1! - UVA 12304