日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

爆栈的处理方法

發布時間:2023/12/19 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 爆栈的处理方法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

爆棧指遞歸中,存儲的信息量大于系統棧的內存。

信息量包括元素編號,每一層中開的變量。

和遞歸的層數正相關。

(雖然noip一般開棧)

1.手寫棧

while(top){

  int x=sta[top];

  for(each son)

  if(has son){

    //blablabla

    sta[++top]=son;

    hd[x]=e[i].nxt;

  }

  else{

    //blablabla

    sta[top--]=0;

  }

}

可以用一個弧優化,使得每次兒子回溯后,父親往下的邊的訪問直接繼續。

這樣復雜度就對了。

如果son回溯后,在到下一個son之前,還要做一些事情,那就用個pair,結構體什么的,討論一下情況即可。

?

?

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了。

?

3.本地手動開棧:

#pragma GCC ("-W1,--stack=128000000)手動開棧。

?

轉載于:https://www.cnblogs.com/Miracevin/p/9828971.html

總結

以上是生活随笔為你收集整理的爆栈的处理方法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。