lca學習心得

2021-08-27 05:38:29 字數 727 閱讀 2061

lca求樹上兩點最近的公共祖先。

對於樹上兩點最近的公共祖先,我們首先能想到的辦法,就是暴力,如果深度不相同先調整到相同深度,如果深度相等了,祖先不同的話,就繼續向上找,直到找到相同的公共祖先。

但是這樣的方法,顯然速度太慢,那麼我們該怎麼尋找兩個點最近的公共祖先呢?

我們可以處理一顆樹上的所有點將其所有的2的次冪的祖先處理出來,放在乙個陣列中,尋找兩個點共同公共祖先時,首先將兩個點深度調到一致,然後我們兩個點一起向上找直到找到共同的公共祖先。

**:首先預處理深度,公共祖先陣列:

void dfs(int pre,int rt)

for(int i=0;i之後直接,lca搜尋公共祖先即可:

int lca(int x,int y)

if(x==y)

return x;

for(int i=18;i>=0;i--)

return fa[x][0];

}

lca的簡單應用:

找一棵樹上兩個點最短距離:

我們事先處理過深度陣列,那麼對於一直的兩個點,根據其深度即可求得兩個點最短距離:

depth[x]+depth[y]-2*depth[lca(x,y)]即可;

int dis(int x,int y)

return depth[x]+depth[y]-2*depth[lca];

}

學習心得 python學習心得

自從來了深圳工作以後,尤其是屢屢面試碰壁以後。發現其實自己的知識面很窄,做筆試題的時候絞盡腦汁還是漏洞百出,並不是不會做,而是出現一大堆不該有的失誤。每次被問道,對資料庫了解嗎?說一大堆看起來很高階的東西 好啊,那我們寫幾個sql語句吧。馬上完蛋了,沒了手冊關鍵字都記不起。了解哪幾種指令碼語言,sh...

學習心得 我的學習心得

我是乙個已經步入中年的70後,離開校園已經20年了,因為當年的政策因素而未能圓我的大學夢,在20年的工作過程中總是因為缺少一張大學文憑而失去了很多機會,曾經也考慮過自考,但是乙個人去面對的時候總感覺心有餘而力不足。2018年3月份偶然讓我認識了尚德,原來自考還可以這樣學習。一直懷疑自己年紀大了記憶力...

Spring學習心得

不看不知道,一看便學到,會不會與您產生共鳴呢?喜歡再捧場拍磚 spring使用從一年前開始,邊學習邊開發。這裡講講我的學習心得。第一條 記住ioc就是spring的一切。而掌握ioc的唯一方法就是使用和思考。spring是ioc為核心的,所以第一步就是要深刻理解ioc,最好是能盡快把ioc作為教條式...