家庭關係可以用家譜樹來表示,給定乙個家譜樹,你的任務是找出其中沒有孩子的成員。
輸入格式
第一行包含乙個整數 n 表示樹中結點總數以及乙個整數 m 表示非葉子結點數。
接下來 m 行,每行的格式為:
id k id[1] id[2] ... id[k]
id 是乙個兩位數字,表示乙個非葉子結點編號,k 是乙個整數,表示它的子結點數,接下來的 k 個 id[i] 也是兩位數字,表示乙個子結點的編號。
為了簡單起見,我們將根結點固定設為 01。
所有結點的編號即為 01,02,03,…,31,32,33,…,n。
輸出格式
輸出從根結點開始,自上到下,樹的每一層級分別包含多少個葉子節點。
輸出佔一行,整數之間用空格隔開。
資料範圍021
01102輸出樣例:
0
1
樣例解釋
該樣例表示一棵只有 2 個結點的樹,其中 01 結點是根,而 02 結點是其唯一的子節點。
因此,在根這一層級上,存在 0 個葉結點;在下乙個級別上,有 1 個葉結點。
所以,我們應該在一行中輸出0 1。
就是樹的簡單遍歷(bfs和dfs),但是作為樹這章的第一題,對於樹的儲存,新增寫了比較詳細的解釋,
#include
using
namespace std;
const
int n=
110;
int n,m;
int h[n]
,e[n]
,ne[n]
,idx;
//鄰接表
int cnt[n]
,max_depth;
//cnt是記錄每個深度葉子節點的數目,max_depth統計最大深度
void
add(
int a,
int b)
//在鄰接表中新增元素,即在父節點a下面新增乙個孩子節點b
void
dfs(
int u,
int depth)
for(
int i=h[u]
;i!=-1
;i=ne[i]
)//遍歷鄰接表,就是遍歷當前元素的孩子們
}int
main()
}dfs(1
,0);
//從一號節點開始遍歷,第0層
cout<;for
(int i=
1;i<=max_depth;i++
) cout<<
' '<; cout
}
#include
using
namespace std;
typedef pair<
int,
int> pii;
const
int n=
110;
int n,m;
int h[n]
,e[n]
,ne[n]
,idx;
//鄰接表
int cnt[n]
,max_depth;
//cnt是記錄每個深度葉子節點的數目,max_depth統計最大深度
void
add(
int a,
int b)
//在鄰接表中新增元素,即在父節點a下面新增乙個孩子節點b
void
bfs())
;while
(q.size()
)else);
}}}}
intmain()
}bfs()
;//從一號節點開始遍歷,第0層
cout<;for
(int i=
1;i<=max_depth;i++
) cout<<
' '<; cout
}
關於開設書法輔導課的理由
在當今的社會大環境下,各種電子產品的興起,導致了乙個很值得我們 的乙個問題,就是國人的書寫水平急劇下降。隨著網際網路的飛速發展,人們已經習慣了在網上交流溝通,各種平台,論壇興起,以往的手書文字變成了敲敲鍵盤就解決了。書信這種通訊交流方式已經基本退出了歷史舞台。人們手寫的環境變得越來越狹窄,找乙個能寫...
PAT甲級1004樹的遍歷
個人覺得這題沒有1003南欸,就乙個樹的遍歷,把根找出來dfs就完事了,非常莫得技術含量,居然有30分,感覺有點點德不配位,題不配分哈哈哈哈哈哈 include include include include include include include include define inf 40...
PAT甲級 1020 樹的遍歷
用了乙個hash表方便後續的查詢工作。pos的作用是記錄中序遍歷中 的該值所在的陣列下標編號 int q n 模擬乙個佇列,用於輸出層序遍歷 intbuild int il,int ir,int pl,int pr void bfs int root 輸出個層序遍歷 int main int roo...