樹的經典問題和方法

來源:互聯網
上載者:User

標籤:第2版   計算   維護   答案   center   節點   過程   dfs   下標   

樹的經典問題和方法

《演算法競賽入門經典(第2版)》392頁

歐拉序列。對有根樹t進行dfs(深度優先遍曆),無論是遞迴還是回溯,每次到達一個結點時都將深度記錄下來,可以得到一個長度為2n-1的序列,稱為t的歐拉序列f(類似於歐拉迴路)。

為了方便,把結點k在歐拉序列中第一次出現的序號記為pos(k)。

有了歐拉序列,lca問題可以線上性時間內化為rmq問題:lca(t,u,v)=rmq(b,pos(u),pos(v))。這裡rmq返回的是下標而不是值本身。

這個等式不難理解:從u走到v的過程中一定會經過lca(t,u,v),但不會經過lca(t,u,v)的祖先。因此,從u走到v的過程中經過的深度最小的結點就是lca(t,u,v)。

用dfs計算歐拉序列的時間複雜度是o(n),且歐拉序列的長度是2n-1=o(n),所以lca問題可以在o(n)的時間內轉化成等規模的rmq問題。

樹的動態查詢問題1。給定一棵帶邊權的樹,要求支援兩種操作:修改某條邊的權值和詢問樹中兩點間的距離。

首先把無根樹變成有根樹,則把一條邊u-v(假定u是v的父親結點)的權值增加d時,以u為根的整個子樹的“到根節點的距離”同時增加d。不難發現,一棵子樹內的結點對應歐拉序列中的一段連續序列,因此如果用dist[i]表示歐拉序列中第i個結點到根的距離,則修改操作就是dist數組上的“區間增量”,而查詢時的距離(u,v)等於dist(u)+dist(v)-2dist(w),其中w=lca(u,v)。這樣,只需用一個支援快速區間增量和單點查詢的資料結構(例如fenwick樹或者線段樹)來維護dist數組,就可以在o(log n)的時間內支援兩個操作。

輕重路徑剖分。給定一棵有根樹,對於每個非分葉節點u,設u的子樹中結點數最多的子樹的樹根為v,則標記(u,v)為重邊,從u出發往下的其它邊均為輕邊。

根據上面的定義,只需一次dfs就能把一棵樹分解成若干重路徑(重邊組成的路徑)和若干輕邊。有些資料也把重路徑稱為樹鏈,因此輕重路徑剖分也稱樹鏈剖分。

路徑剖分最重要的定理如下:若v是u的子結點,(u,v)是輕邊,則size(v)<size(u)/2,其中size(u)表示以u為根的子樹中的結點總數。

證明並不複雜。由定義,所有非葉結點都有一條重邊。假設size(v)>=size(u)/2,那麼對於u向下的重邊(u,w)來說,size(w)>=size(v)>=size(u)/2,因此size(u)>=1+size(v)+size(w)>=1+size(u),與假設矛盾。

由此可以得到如下重要結論:對於任意非根結點u,在u到根的路徑上,輕邊和重路徑的條數均不超過log2n因為每碰到一條輕邊size值就會減半。

樹的動態查詢問題2。給定一棵帶邊權的樹,要求支援兩種操作:修改某條邊的權值和詢問樹中兩點之間唯一路徑上的最大邊權。

首先把無根樹變成有根樹並且求出路徑剖分。任意結點u到其根節點x的簡單路徑中包含一些輕邊和重路徑,但這些重路徑可能並不是原樹中的完整重路徑,而是一些“片段”,因此可以在輕邊中直接儲存邊權,而用線段樹維護重路徑。這樣兩個操作都不難實現。

修改:輕邊直接修改,重邊需要在重路徑對應的線段樹中修改。

查詢:設lca(u,v)=p,則只需求出u到其祖先p之間的最大變權maxw(u,p),再用類似的方法求出maxw(v,p),則答案為max{maxw(u,p),maxw(v,p)}。為了求出maxw(u,p),依次訪問u到p之間的每條重路徑和輕邊即可。根據剛才的結論,輕邊和重路徑的條數均不超過log2n。這樣,修改的時間複雜度為o(log n),查詢的時間複雜度為o(log2n)。雖然存在時間複雜度更低的方法,但上述方法已經很實用了。

樹的經典問題和方法

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.