AcWing 846 樹的重心

2021-10-19 12:52:44 字數 1200 閱讀 7088

大佬的題解

/題目鏈結

這道題給的標籤竟然是

樹與圖的深度優先遍歷

這是神馬玩意,然後我點進去看了一下,果然還是沒有思路,然後看了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 條無向邊。請你找到樹的重心,並輸出將重心刪除後,剩餘各個連通塊中點數的最大值。重心定義 重心是指樹中的乙個結點,如果將這個點刪除後,剩餘各個連通塊中點數的最大值最小,那麼這個節點被稱為樹的重心。輸入格式 第一...