大佬的題解
/題目鏈結
這道題給的標籤竟然是
樹與圖的深度優先遍歷
這是神馬玩意,然後我點進去看了一下,果然還是沒有思路,然後看了y總,如願以償,y總yyds,我看懂了,然後我就認真再看了一遍題。
我覺得好像是求子樹問題,然後我就有了思路。
大佬的題解其實講的很清楚,最主要的是靠自己的想象,最關鍵的幾個變數sum,n。剩下的都是基本的變數,因為我們把根節點堵住了,我們不可能用到根節點的子樹,求根節點的子樹我們只能用n-1-sum,這個方法,於是這樣我們把所有的子樹都求出來了。
我腦子可能想出來更簡單的方法,很明顯,這個時間複雜度是o(n)級別的,非常好,我的是o(n2)級別的,所以還是盡量去學學y總的方法吧。
**如下,基本和他們的**大同小異,不過都是各自自己寫的,都是根據y總的模板基礎上寫出來的。
#include
#include
#include
using
namespace std;
const
int n=
1e5+10;
int h[n]
,e[n*2]
,ne[n*2]
,idx,n;
void
add(
int a,
int b)
int ans=n;
bool book[n]
;int
dfs(
int x)
size=
max(size,n-
1-sum)
;
ans=
min(ans,size)
;return sum+1;
}int
main
(void
)dfs(1
);cout<
}
y總**
ACWing846 樹的重心
dfs,一次遍歷,求出每個結點去除該點後的最大連通塊的個數,同時更新ans 全域性變數存放最終結果 1 include2 include3 include4 using namespace std 56 const int n 100010 7 int h n e n 2 ne n 2 idx 樹為...
AcWing 846 樹的重心
給定一顆樹,樹中包含n個結點 編號1 n 和n 1條無向邊。請你找到樹的重心,並輸出將重心刪除後,剩餘各個連通塊中點數的最大值。重心定義 重心是指樹中的乙個結點,如果將這個點刪除後,剩餘各個連通塊中點數的最大值最小,那麼這個節點被稱為樹的重心。輸入格式 第一行包含整數n,表示樹的結點數。接下來n 1...
AcWing 846 樹的重心
目錄dfs演算法求解 參考文章 給定一顆樹,樹中包含 n 個結點 編號 1 n 和 n 1 條無向邊。請你找到樹的重心,並輸出將重心刪除後,剩餘各個連通塊中點數的最大值。重心定義 重心是指樹中的乙個結點,如果將這個點刪除後,剩餘各個連通塊中點數的最大值最小,那麼這個節點被稱為樹的重心。輸入格式 第一...