色婷婷狠狠18禁久久YY,CHINESE性内射高清国产,国产女人18毛片水真多1,国产AV在线观看

樹的直徑怎么量法

錢良釵2年前14瀏覽0評論

樹的直徑怎么量法?

一般做法是寫個樹上dp, 。建議自己腦補出來,很簡單。實在補不出來的話:對于根節點,直徑要么經過它,要么經過它的子樹。

對于前者(經過這個根節點),最遠點對一定在兩棵子樹里面。

那么我們求出每棵子樹中距root最遠的點是誰,把這個距離扔進dis數組;然后從dis數組取出最大的點和第二大的點。

對于后者(經過它的子樹),不用管,遞歸下去,交給子樹處理。

實現是dfs,對于點x的每個子樹,記錄下到x的最遠點。

取最遠和第二遠的點,這就是x所管轄的區間內的最遠點對,這倆點記為u[x]和v[x],距離記為dis[x];然后把最遠點回溯上去。

最后把所有的點都拎出來,看看誰的dis值最大。dis值最大的u[x]到v[x]就是一條直徑。不過我更喜歡一個比較小眾的辦法,非常無腦:任選一個點x找到一個距x最遠的點u找到一個距u最遠的點vu-v即為樹的一個直徑。

結合樹形dp和上述做法,可以 求出這棵樹的所有直徑。