题目传送门:https://www.patest.cn/contests/pat-a-practise/1094
AC代码
#include <iostream>
#include <string>
#include <cstdio>
#include <vector>
#include <queue>
#include <algorithm>
#include <stack>
#include <map>
using namespace std;
struct Node
{
int id,level;
Node * parent;
Node(int x):id(x),parent(NULL){};
};
int main()
{
int n,m;
scanf("%d %d",&n,&m);
vector<Node *> ans;
for (int i=0; i<n; ++i)
ans.push_back(new Node(01));
int curid,childID,k;
for (int i=0; i<m; i++) {
scanf("%d %d",&curid,&k);
for (int j=0; j<k; ++j) {
scanf("%d",&childID);
ans[childID-1]->parent = ans[curid-1];
}
}
map<int,int> res;
for(int i=0;i<n;++i){
Node * p = ans[i];
int curCount = 1;
while (p->parent) {
curCount++;
p = p->parent;
}
ans[i]->level = curCount;
res[curCount]++;
}
int targetID = 0,targetNum = 0;
for (auto it = res.begin();it!=res.end();++it) {
if(it->second>targetNum)
{
targetNum = it->second;
targetID = it->first;
}
}
printf("%d %d\n",targetNum,targetID);
return 0;
}