疑问
暂无
代码
//这道题用一下层序遍历
#include<cstdio>
#include<vector>
#include<queue>
#include<algorithm>
using namespace std;
const int maxn = 110;
struct node{
int depth=0;
vector<int> child;
}Node[maxn];
int hashTable[maxn]; //记录深度i对应的人数
//家庭成员
int n; //编号从1开始
//有孩子的家庭成员
int m;
//最大深度
int depth=-1; //根结点为深度1
//最大人数
int maxNum=0;
void layerOrder(){
Node[1].depth = 1;
queue<int> q;
q.push(1);
while(!q.empty()){
int cur = q.front();
hashTable[Node[cur].depth]++;
q.pop();
for(int i=0;i<Node[cur].child.size();i++){
q.push(Node[cur].child[i]);
Node[Node[cur].child[i]].depth = Node[cur].depth + 1;
}
}
}
int main(){
fill(hashTable,hashTable+maxn,0);
scanf("%d %d",&n,&m);
for(int i=0;i<m;i++){
int now;
int num;
scanf("%d %d",&now,&num);
for(int j=0;j<num;j++){
int cnum;
scanf("%d",&cnum);
Node[now].child.push_back(cnum);
}
}
layerOrder();
for(int i=1;i<maxn;i++){
if(hashTable[i] > maxNum){
depth = i;
maxNum = hashTable[i];
}
}
printf("%d %d",maxNum,depth);
return 0;
}
反思
- 《算法笔记》上也是使用了
hashTable
,只不过它是用的DFS; - 使用DFS的话,可以使用最简单的树的表达,不用使用结构体了,直接使用
vector<int> Node[MAXN]
;