1004 Counting Leaves

本题传送门

解题思路

比较简单的dfs,首先用邻接表存关系,然后直接dfs就行,不过dfs的过程中要加上层数的参数,如果一个数没有后代,也就是邻接表这一块的大小为0,就让这一层计数加一。我还维护了一个最大深度来确定一共有多少层。

虽然是一道很简单的题,但是确实比以前进步不少,一遍就ac了,以前dfs经常出错,要么是死脑筋不知道传2个参数,要么是逻辑完全混乱。

万丈红尘缤纷彩

ac✅️代码

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

vector<int> fa[1010];
vector<int> layer(1010);
int max_len ;
void dfs(int u , int l)
{
    max_len = max(max_len , l);
    
    if(fa[u].size() == 0 ) layer[l] ++;
    
    for(int v : fa[u])
    {
        dfs(v , l + 1); 
    }
}

int main()
{
    int n,m;
    cin>>n>>m;
    for(int i = 0 ; i < m ; i++)
    {
        int f;cin>>f;
        int k;cin>>k;
        for(int j = 0 ; j < k ; j ++)
        {
            int son ; cin>>son;
            fa[f].push_back(son);
        }
    }
    
    dfs(1 , 1);
    
    for(int i = 1 ; i <= max_len ; i ++ )
    {
        cout<<layer[i];
        if( i != max_len) cout<<" "; 
    }
    return 0;
}
posted @ 2026-03-29 18:13  shuiwangrenjia  阅读(12)  评论(0)    收藏  举报