题目
https://pintia.cn/problem-sets/994805342720868352/problems/994805372601090048
题意
给出一颗家族树,输出拥有最多节点的层的节点数和层数
代码解析
都是dfs和bfs的模板,需要熟练掌握
AC代码
#include<bits/stdc++.h>
using namespace std;
unordered_map<int,vector<int>> f;
int cnt[105];
void bfs(int root)
{
queue<int> q;
q.push(root);
int last=q.back(),level=1;
while(q.size())
{
int t=q.front();
q.pop();
cnt[level]++;
for(int i=0;i<f[t].size();i++)
q.push(f[t][i]);
if(t==last)
{
level++;
last=q.back();
}
}
}
void dfs(int root,int depth)
{
cnt[depth]++;
for(int i=0;i<f[root].size();i++)
dfs(f[root][i],depth+1);
}
int main()
{
int n,m;
cin>>n>>m;
while(m--)
{
int num,k,t;
cin>>num>>k;
while(k--)
{
cin>>t;
f[num].push_back(t);
}
}
dfs(1,1);
// bfs(1);
int maxn=0,pos=0;
for(int i=1;i<105;i++)
{
if(cnt[i]>maxn)
{
pos=i;
maxn=cnt[i];
}
}
cout<<maxn<<" "<<pos;
}
该博客主要解析了一道关于家族树问题的算法题目。通过DFS或BFS遍历家族树,找出拥有最多节点的层及其节点数。代码实现包括DFS和BFS模板,用于计算每个层次的节点数量,并找到最大值。最后输出最大节点数和对应的层数。
1064





