dfs,一次遍歷,求出每個結點去除該點後的最大連通塊的個數,同時更新ans(全域性變數存放最終結果)
1 #include2 #include3 #include4注意圖的儲存是從1開始的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 }
AcWing 846 樹的重心
大佬的題解 題目鏈結 這道題給的標籤竟然是 樹與圖的深度優先遍歷 這是神馬玩意,然後我點進去看了一下,果然還是沒有思路,然後看了y總,如願以償,y總yyds,我看懂了,然後我就認真再看了一遍題。我覺得好像是求子樹問題,然後我就有了思路。大佬的題解其實講的很清楚,最主要的是靠自己的想象,最關鍵的幾個變...
AcWing 846 樹的重心
給定一顆樹,樹中包含n個結點 編號1 n 和n 1條無向邊。請你找到樹的重心,並輸出將重心刪除後,剩餘各個連通塊中點數的最大值。重心定義 重心是指樹中的乙個結點,如果將這個點刪除後,剩餘各個連通塊中點數的最大值最小,那麼這個節點被稱為樹的重心。輸入格式 第一行包含整數n,表示樹的結點數。接下來n 1...
AcWing 846 樹的重心
目錄dfs演算法求解 參考文章 給定一顆樹,樹中包含 n 個結點 編號 1 n 和 n 1 條無向邊。請你找到樹的重心,並輸出將重心刪除後,剩餘各個連通塊中點數的最大值。重心定義 重心是指樹中的乙個結點,如果將這個點刪除後,剩餘各個連通塊中點數的最大值最小,那麼這個節點被稱為樹的重心。輸入格式 第一...