樹的子樹大小與深度

2021-09-27 08:30:49 字數 1074 閱讀 5108

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...