走一遍BFS,计算每一层的孩子数目,同时跟踪最大值
#include <iostream>
#include <cstdio>
#include <vector>
#include <queue>
using namespace std;
vector<vector<int>> tree;
int main(){
int n,m;
scanf("%d%d", &n, &m);
tree.resize(n+1, vector<int>());
for(int i = 0; i < m; ++i){
int id, k, child;
scanf("%d%d", &id, &k);
for(int j = 0; j < k; ++j){
scanf("%d", &child);
tree[id].push_back(child);
}
}
int maxNum = 0, maxLevel = 0;
vector<int> hist(101, 0);
queue<pair<int,int>> Q;
Q.push({1, 1});
while(!Q.empty()){
auto p = Q.front(); Q.pop();
int id = p.first, level = p.second;
hist[level]++;
if(hist[level] > maxNum){
maxNum = hist[level];
maxLevel = level;
}
for(auto& c : tree[id]){
Q.push({c, level+1});
}
}
printf("%d %d", maxNum, maxLevel);
return 0;
}
BFS遍历计算每层孩子数并寻找最大值
415

被折叠的 条评论
为什么被折叠?



