ACWing846 樹的重心

2022-06-08 16:33:07 字數 879 閱讀 9628

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;//

樹為無向聯通圖,所以a->b,b->a

8bool st[n];//

記錄是否被訪問過

9int ans = n;//

儲存最終結果

10int n;//

結點個數

1112

//鄰接表加入一條a->b的邊

13void add(int a,int

b)17

18//

返回子節點個數

19int dfs(int

u)29

}30 res = max(res,n-sum);//

找到刪掉該節點後最大連通塊的個數

31 ans = min(res,ans);//

找最小的最大值

32return sum;//

返回子節點個數

3334}35

intmain()

45 dfs(1);//

從第乙個結點開始

46 printf("%d"

,ans);

47return0;

48 }

注意圖的儲存是從1開始的

AcWing 846 樹的重心

大佬的題解 題目鏈結 這道題給的標籤竟然是 樹與圖的深度優先遍歷 這是神馬玩意,然後我點進去看了一下,果然還是沒有思路,然後看了y總,如願以償,y總yyds,我看懂了,然後我就認真再看了一遍題。我覺得好像是求子樹問題,然後我就有了思路。大佬的題解其實講的很清楚,最主要的是靠自己的想象,最關鍵的幾個變...

AcWing 846 樹的重心

給定一顆樹,樹中包含n個結點 編號1 n 和n 1條無向邊。請你找到樹的重心,並輸出將重心刪除後,剩餘各個連通塊中點數的最大值。重心定義 重心是指樹中的乙個結點,如果將這個點刪除後,剩餘各個連通塊中點數的最大值最小,那麼這個節點被稱為樹的重心。輸入格式 第一行包含整數n,表示樹的結點數。接下來n 1...

AcWing 846 樹的重心

目錄dfs演算法求解 參考文章 給定一顆樹,樹中包含 n 個結點 編號 1 n 和 n 1 條無向邊。請你找到樹的重心,並輸出將重心刪除後,剩餘各個連通塊中點數的最大值。重心定義 重心是指樹中的乙個結點,如果將這個點刪除後,剩餘各個連通塊中點數的最大值最小,那麼這個節點被稱為樹的重心。輸入格式 第一...