A1094
Description:
常用家谱图表示家系关系,同层次的节点属于同一代。你的任务是找出具有最多人的那一代。
注意:
别的就不说了,注意有一组卡整个家族只有一个人的时候的边界值
#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<string.h>
#include<algorithm>
#include<map>
#include<vector>
#include<queue>
using namespace std;
const int maxn = 105;
struct node{
int depth; //层次
vector<int>child;
}Node[maxn];
int n, m;
int cnt[maxn];
int maxp = 1, maxdepth = 1; //注意初始值,家族最少为一个人
void bfs(){
queue<int>q;
q.push(1);
while(!q.empty()){
for(vector<int>::iterator it = Node[q.front()].child.begin();
it != Node[q.front()].child.end(); it++){
Node[*it].depth = Node[q.front()].depth + 1;
cnt[Node[*it].depth]++;
q.push(*it);
if(cnt[Node[*it].depth] > maxp){
maxp = cnt[Node[*it].depth];
maxdepth = Node[*it].depth;
}
}
q.pop();
}
}
int main()
{
#ifdef ONLINE_JUDGE
#else
freopen("1.txt", "r", stdin);
#endif // ONLINE_JUDGE
scanf("%d%d", &n, &m);
int in, k, chin;
for(int i = 0; i < m; i++){
scanf("%d%d", &in, &k);
for(int j = 0; j < k; j++){
scanf("%d", &chin);
Node[in].child.push_back(chin);
}
}
Node[1].depth = 1;
bfs();
printf("%d %d", maxp, maxdepth);
return 0;
}