2022.1.28 练习 PAT甲 1094 The Largest Generation(原题链接)
自己写的代码(19分),暂时想不通为何扣分,记录留待以后思考。
#include <bits/stdc++.h>
using namespace std;
const int MAX_SIZE=110;
int n,m;
int a[MAX_SIZE]={0};
struct node
{
int parent;
int level;
}Node[MAX_SIZE];
int main()
{
std::ios::sync_with_stdio(false);
cin>>n>>m;
Node[1].level=1;
while(m--)
{
int id,k;
cin>>id>>k;
while(k--)
{
int tmp;
cin>>tmp;
Node[tmp].parent=id;
}
}
int num=1;
int res=1;
for(int i=2;i<=n;i++)
{
Node[i].level=Node[Node[i].parent].level+1;
a[Node[i].level]++;
if(a[Node[i].level]>num)
{
num=a[Node[i].level];
res=Node[i].level;
}
}
cout<<num<<" "<<res;
return 0;
}
满分代码:
#include <bits/stdc++.h>
using namespace std;
const int MAX_SIZE=110;
vector<int> Node[MAX_SIZE];//Node[i]存放结点i的孩子节点编号
int hashtable[MAX_SIZE]={0};
void DFS(int index,int level)
{
hashtable[level]++;//level层的结点数加一
for(int i=0;i<Node[index].size();i++)
DFS(Node[index][i],level+1);//遍历所有孩子结点,进行递归,孩子结点层数加一
}
int main()
{
std::ios::sync_with_stdio(false);
int n,m;
cin>>n>>m;
while(m--)
{
int id,k;
cin>>id>>k;
while(k--)
{
int tmp;
cin>>tmp;
Node[id].push_back(tmp);
}
}
DFS(1,1);//根节点为1号结点,层号为1
int maxlevel=-1,maxvalue=0;
for(int i=1;i<MAX_SIZE;i++)
{
if(hashtable[i]>maxvalue)
{
maxvalue=hashtable[i];
maxlevel=i;
}
}
cout<<maxvalue<<" "<<maxlevel;
return 0;
}