51nod 2281
這題用的是並查集的思想,由於給定了父子關係,所以很容易知道建立並查集,最後find每個數,並且find函式找到一次某個節點,就給這個節點計數一次,代表這個節點有這個子節點
#include
using namespace std;
int num[
1005
],pre[
1005];
void
ans(
int x)
intmain()
for(
int i=
1;i<=t-
1;i++
)for
(int i=
1;i<=t;i++
)int a=0;
for(
int i=
1;i<=t;i++
) cout<}
這題和上面那題有些不同,首先他還需要求乙個深度,而且他還沒有給出父子關係,只給出了哪兩個節點之間有邊,選擇用無向圖的鏈式前向星存圖,然後用dfs跑一遍圖,邊跑邊記錄深度和子樹大小就行了
#include
using namespace std;
const
int max=
100005
;int head[max]
,depth[max]
,size[max]
;struct
edge[max]
;int cnt=1;
void
add_edge
(int u,
int v)
intdfs
(int x,
int h)
return
(size[x]
=lu);}
intduru()
return t;
}void
shuchu
(int t)
cout
int i=
1;i<=t;i++)}
intmain()
子樹大小平衡樹
include define mxn 100000 3 define max a,b a b?a b define min a,b a define nil 0 define left false define right true int val mxn size mxn fa mxn left ...
樹的應用 求有根樹所有子樹大小
給出一棵節點編號為1 n的有根樹,計算它的所有子樹的大小 輸入格式 第一行為乙個整數n 第二行是n個整數,依次表示編號為1到n的節點的父親編號。特別的,父親編號為0表示這個點是根。輸出格式 輸出一行,n個整數,依次表示編號為1到n的節點為根的子樹的大小。題目的特殊性在於樹的構建 第一,這不是二叉樹,...
樹的子結構 遍歷子樹
輸入兩棵二叉樹a和b,判斷b是不是a的子結構。約定空樹不是任意乙個樹的子結構 b是a的子結構,即 a中有出現和b相同的結構和節點值。例如 給定的樹 a 3 4 5 1 2給定的樹 b 4 1返回 true,因為 b 與 a 的乙個子樹擁有相同的結構和節點值。示例 1 輸入 a 1,2,3 b 3,1...