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;
}

浙公网安备 33010602011771号