1004. Counting Leaves (30)

分析:求樹中每層的葉子節點數並輸出。直接DFS。

代碼:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <vector>
using namespace std;

const int maxn = 110;

vector<int> child[maxn];
bool vis[maxn];
int num[maxn];
int deep;
int m, n, k;

void DFS(int root, int d) {
    int nch = child[root].size();
    if(nch == 0) {
        deep = max(deep, d);
        num[d]++;
        return;
    }
    for(int i = 0; i < nch; ++i) {
        int u = child[root][i];
        vis[u] = true;
        DFS(u, d+1);
    }
}

int main() {
    scanf("%d%d", &m, &n);
    for(int i = 0; i < n; ++i) {
        int fa;
        scanf("%d %d", &fa, &k);
        for(int j = 0; j < k; ++j){
            int x;
            scanf("%d", &x);
            child[fa].push_back(x);
        }
    }
    deep = 0;
    memset(vis, 0, sizeof(vis));
    vis[1] = true;
    DFS(1, 0);
    for(int i = 0; i < deep+1; ++i) {
        printf("%d%c", num[i], i == deep ? '\n' : ' ');
    }

    return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章