题目大意:给出一棵树的信息,找到节点最多的那一层,以及节点的数目。根节点记为第一层。
树遍历问题,由于和层数相关,dfs和bfs都可以,因为bfs要另外设置结构体记录层数,dfs写起来似乎更方便。
AC代码:
dfs:
#include <vector>
#include <cstdio>
using namespace std;
void dfs(int index, int layer, vector<int> &layerCnt, int &maxCnt, int &maxCntLayer, vector<vector<int>> &tree)
{
layerCnt[layer]++;
if(layerCnt[layer] > maxCnt)
{
maxCnt = layerCnt[layer];
maxCntLayer = layer;
}
for (int i = 0; i < tree[index].size(); ++i)
dfs(tree[index][i], layer + 1, layerCnt, maxCnt, maxCntLayer, tree);
}
int main()
{
int N, M;
scanf("%d%d", &N, &M);
vector<vector<int>> tree(N+1);
vector<int> layerCnt(N);
for (int i = 0; i < M; ++i)
{
int id, childNum;
scanf("%d%d", &id, &childNum);
for (int j = 0; j < childNum; ++j)
{
int childId;
scanf("%d", &childId);
tree[id].push_back(childId);
}
}
int maxCnt = 0, maxCntLayer = 0;
dfs(1, 1, layerCnt, maxCnt, maxCntLayer, tree);
printf("%d %d", maxCnt, maxCntLayer);
return 0;
}