树的层序遍历
//
// main.cpp
// PATA1094
//
// Created by Phoenix on 2018/2/21.
// Copyright © 2018年 Phoenix. All rights reserved.
//
#include <iostream>
#include <cstdio>
#include <vector>
#include <queue>
using namespace std;
const int maxn = 111;
int n, m;
struct node {
vector<int> child;
}node[maxn];
int ans = 0, level;
void levelorder() {
queue<int> q;
q.push(1);
int num = 0, l = 1;
int lastnode = 1, newlastnode;
while(!q.empty()) {
int top = q.front();
num++;
q.pop();
if(num > ans) {
ans = num;
level = l;
}
for(int i = 0; i < node[top].child.size(); i++) {
q.push(node[top].child[i]);
newlastnode = node[top].child[i];
}
if(top == lastnode) {
l++;
lastnode = newlastnode;
num = 0;
}
}
}
int main(int argc, const char * argv[]) {
scanf("%d %d", &n, &m);
for(int i = 0; i < m; i++) {
int father, k, child;
scanf("%d %d", &father, &k);
for(int j = 0; j < k; j++) {
scanf("%d", &child);
node[father].child.push_back(child);
}
}
levelorder();
printf("%d %d\n", ans, level);
return 0;
}