#include <iostream>
#include <vector>
using namespace std;
vector<int>a[2222];
int p[2222]={0};
int n;
int deep[2222]={0};
void dfs(int i,int d)
{
int len=a[i].size();
deep[i]=d;
for (int v=0;v<len;v++)
{
dfs(a[i][v],d+1);
}
}
int main()
{
cin>>n;
for (int i=1;i<=n;i++)
{
cin>>p[i];
if (p[i]!=-1)
{
a[p[i]].push_back(i);
}
}
for (int i=1;i<=n;i++)
{
if (p[i]==-1)
{
dfs(i,1);
}
}
int ans=0;
for (int i=1;i<=n;i++)
{
if (deep[i]>ans)
{
ans=deep[i];
}
}
cout<<ans<<endl;
return 0;
}

公司员工分为无上级和有上级两类,无上级的员工可以领导有上级的员工,但不允许形成管理环。现在要将所有员工按没有上下级关系的原则分组,求最少能分成多少组。输入包含员工数和每个员工的直接上级,输出最少的分组数。第一例中,至少需要3组:员工1一组,员工2和4一组,员工3和5一组。

306

被折叠的 条评论
为什么被折叠?



