支配树 Dominator Tree
写在前面
今天亮神花了一早上给讲了支配树,但由于今天网(没)速(人)不(跟)好(上),我们残忍地看了他一眼后掉线了,于是又用了一下午开流量重新联网并结合缓(课)存(件)学习。
注:本文在原文的基础上加上了作者本人理解,不好勿喷。
就由一道题引入吧。
题目
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]<=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)·−>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)>=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)·−>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]<dfn[y]" role="presentation" style="position: relative;">dfn[vi]<dfn[y]dfn[vi]<dfn[y]dfn[v_i] 。由引理一得,应当有某个jjj满足 i<=j<=k−1" role="presentation" style="position: relative;">i<=j<=k−1i<=j<=k−1i 且点 vjvjv_j 是点 viviv_i 和 yyy 的公共祖先(即vj·−>j" role="presentation" style="position: relative;">vj⋅−>jvj·−>jv_j·->j)。根据xxx的选择方式:路径上 dfn[x]<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]>=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+−>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)+−>u·−>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·−>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]<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)·−>y·−>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)]<=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)+−>u·−>w" role="presentation" style="position: relative;">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) ,即使 dfn[sdom(u)]dfn[sdom(u)]dfn[sdom(u)] 最小的点uuu满足 sdom(u)>=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)<=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)+−>u·−>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相关推荐
- 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 ...
- 有向图的必经点,支配树
支配树的背景 流程图 食物链 GC 场景 DAG 上求支配树 树上倍增 模板: P2597 灾难 一般有向图上求支配树 Lengauer-Tarjan 算法 模板: P5180 [模板]支配树 $0 ...
- 第26课:MAT中的Dominator Tree与Retained Set详解
内容: 1.Dominator Tree与Retained Set 2.Dominator Tree详解 一.Dominator Tree与Retained Set Retained ...
- [支配树][lca][倍增][线段树][拓扑] Jzoj P4240 游行
Description 恶梦是学校里面的学生会主席.他今天非常的兴奋,因为学校一年一度的学生节开始啦!! 在这次节日上总共有N个节目,并且总共也有N个舞台供大家表演.其中第i个节目的表演时间为第i个单 ...
- 使用行为树(Behavior Tree)实现网游奖励掉落系统
原地址:http://blog.csdn.net/akara/article/details/6165421 [原创]使用行为树(Behavior Tree)实现网游奖励掉落系统 by AKara 2 ...
- hihocoder #1343 : Stable Members(支配树)
时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 Recently Little Hi joined an algorithm learning group. The gr ...
- 数据结构与算法(C++)– 树(Tree)
数据结构与算法(C++)– 树(Tree) 1.树的基础知识 树(tree): 一些节点的集合,可以为空集 子树(sub tree): 树的子集 根(root): 树的第一个节点 孩子和父亲(Chil ...
- C语言实现段树segment tree(附完整源码)
C语言实现段树segment tree 段树结构体定义 实现以下6个接口 完整实现和main测试源码 段树结构体定义 typedef struct segment_tree {void *root; ...
- 看动画学算法系列之:后缀树suffix tree
文章目录 简介 字典树Trie 压缩字典树 后缀树Suffix Tree 后缀树的搜索 查找最长重复子字符串 查找两个字符串的最长公共子字符串 后缀树的代码实现 简介 模式匹配是一个在工作中经常会用到 ...
- 【学习笔记】DAG / 一般有向图的支配树 / 灭绝树
定义与声明 一个有向图 GGG.给定一个起点 sss,假设 sss 能到达所有点. 若去掉某个点 iii 后,sss 无法到达 jjj,则称 iii 为 jjj 的支配点. 显然支配点存在传递关系. ...
最新文章
- python的变量对大小写并不敏感_Robot Framework 内置变量
- 程序员级别鉴定书(.NET面试问答集锦)
- UML 类图. 对象图. 接口图. 用例图 .包,参与者. 依赖关系. 泛化/继承关系. 关联关系 .聚合/聚集关系. 实现关系 组合关系。
- Android 中加载网络资源时的优化 缓存和异步机制
- Bringing up interface eth0: Device eth0 does not seem to be present, delaying initialization
- 如何在 5 分钟内读懂区块链的架构思维?
- linux学习手册,Linux命令学习手册-ps
- Anatomy of a Flink Program(Flink程序的剖析)
- 输出100以内所有的质数
- 家用nas的过去现在和未来--2008n年
- mysql.5.7 declare_MySQL-5.7 游标及DECLARE
- 堆(Heap)数据结构
- matlab拟合函数导出,excel里曲线拟合的公式怎么导出?()
- SQL Server 中导入外部数据库文件
- 中国科学院大学2019年高等代数考研试题
- UML在软件开发过程中的应用
- 容迟网络中的路由算法笔记(二)
- 分享AI前端硬件识别4G摄像头模组方案
- 显示器支架什么品牌好?
- nordic 52832中添加RTT打印
热门文章
- 如何修改网页视频播放倍速?(最高16倍速)
- Microsoft office 2013安装图解
- c语言日历程序 带农历,一个完整的日历(含有农历)
- Python- sklearn之最小二乘法
- GridView自带分页 1/总页数 首页 下一页 上一页 尾页 X 页 go 实现方法
- AD831混频器模块
- 编译android版本protobuf
- AD中使用Net Label时,编译时为什么总是Floating。出现的原因。
- vs code进行c/c++开发
- 计算几何(圆相关模板) - 2D Geometry 110 in 1! - UVA 12304