求樹的直徑 樹中最長路

2022-07-23 18:09:16 字數 816 閱讀 1190

對於一顆有邊權的樹,,它的直徑表示樹中最遠的兩個節點之間的距離,,,

可以通過兩次深搜(廣搜)來求出直徑

從任意起點s開始,,求出到s的最遠的節點node,,然後再從node開始求出到node最遠的節點,,,搜尋的過程中更新節點的值和距離,,

(貌似還可以用樹形dp來求,,,

剛剛做的一道題,,當時感覺是兩倍的權值和減去乙個最遠的路,,,但是當時不會求最遠的路的距離,,就放棄了,,,後來有人說就是這個思想,,,就看了一下樹的直徑怎麼求,,,當然這題是求出到節點1最遠的路,,不是直徑,,,

紅書上的板子有點長,,而且建圖方式不怎麼用,,就不管了,,

// #include #include #include #include #include //#include #include #define aaa cout<<233dfs(v);}}

}void bfs(int s, int n)

}}

}}void solve(int n)

int main()

solve(n);

return 0;

}

裸題,,求樹的最長路,,也就是直徑,,

// #include #include #include #include #include //#include #include #define aaa cout<<233dfs(v);}}

}void solve()

int main()

solve();

return 0;

}

(end)

樹的直徑(最長路) 的詳細證明

主要是利用了反證法 假設 s t這條路徑為樹的直徑,或者稱為樹上的最長路 現有結論,從任意一點u出發搜到的最遠的點一定是s t中的一點,然後在從這個最遠點開始搜,就可以搜到另乙個最長路的端點,即用兩遍廣搜就可以找出樹的最長路 證明 1 設u為s t路徑上的一點,結論顯然成立,否則設搜到的最遠點為t則...

求樹的直徑

歡迎來踩本人部落格 樹的直徑 就是樹上最長路 方法 求兩邊dfs即可 步驟 1.從任意一點進行dfs,然後找到乙個最長路徑,記錄最遠點u 2.然後從u再進行dfs,找最長路徑,記錄一點v。u,v 就是樹的直徑 第四屆藍橋杯a組 證明 我們可以看出圖中,樹的直徑是 4 2 5 長度為9.我們一開始選定...

求樹的直徑

歡迎來踩本人部落格 樹的直徑 就是樹上最長路 方法 求兩邊dfs即可 步驟 1.從任意一點進行dfs,然後找到乙個最長路徑,記錄最遠點u 2.然後從u再進行dfs,找最長路徑,記錄一點v。u,v 就是樹的直徑 第四屆藍橋杯a組 證明 我們可以看出圖中,樹的直徑是 4 2 5 長度為9.我們一開始選定...