爆栈的处理方法

爆栈指递归中,存储的信息量大于系统栈的内存。

信息量包括元素编号,每一层中开的变量。

和递归的层数正相关。

(虽然noip一般开栈)

1.手写栈

2.bfs序求dfs序

用bfs求dfs序(先序遍历序)

相同点:

先出来father的编号再出来son的编号。根节点都是1号。

区别:子树连续访问pk儿子连续访问。

联系:就差一个size

bfs求bfs序,再倒序记录每个点的size

然后,遍历bfs序。

这时x的fa一定已经求出了dfs序。

如果上一个点的fa和这个点的fa不同,那么x一定是x的fa的第一个儿子,到了fa之后就先访问x。dfn[x]=dfn[fa[x]]+1

如果上一个点的fa和这个点的fa相同,那么x一定是上一个点的后兄弟。dfn[x]=dfn[las]+size[las]

理解就是,dfs时会先遍历las的整个子树。并且下一个就一定是x了。

猜你喜欢

转载自www.cnblogs.com/Miracevin/p/9828971.html