题目很简单,就是统计一下每层的节点数,输出节点数最多的个数和对应的层数即可。
#include <iostream> #include <cstdio> #include <algorithm> #include <string.h> using namespace std; const int maxn=105; int num[maxn]; int head[maxn]; int tot; struct Edge{ int to; int next; }edge[maxn]; void init(){ memset(head,-1,sizeof(head)); tot=0; } void add(int x,int y){ edge[tot].next=head[x]; edge[tot].to=y; head[x]=tot++; } void dfs(int root, int layer){ num[layer]++; for(int i=head[root];i!=-1;i=edge[i].next){ int v=edge[i].to; dfs(v,layer+1); } } int main() { int n,m,k,a,b; init(); scanf("%d %d",&n,&m); for(int i=1;i<=m;i++){ scanf("%d %d",&a,&k); for(int j=0;j<k;j++){ scanf("%d",&b); add(a,b); } } memset(num,0,sizeof(num)); dfs(1,1); int maximum=0,layer; for(int i=1;i<maxn;i++){ if(num[i]>maximum){ maximum=num[i]; layer=i; } } printf("%d %d ",maximum,layer); return 0; }