my solution is in o(n ) but it still gives tle can any one please help
#include <bits/stdc++.h>
#define int long long int
#define MOD 1000000000+ 7
#define pb push_back
//memset(a,1,sizeof(a));
using namespace std;
int cnt=0;
int binPow(int a, int n) {
int res = 1;
while (n) {
if (n & 1)
res = (1LL * res * a) % MOD;
a = (1LL * a * a) % MOD;
n >>= 1;
}
return res;
}
int numc(int x,int nc[],vector v[])
{
if(v[x].size()==0)
{
return 0;
}
int ans=0;
for(int i=0;i<v[x].size();i++)
{
ans+=numc(v[x][i],nc,v)+1;
}
nc[x]=ans;
return ans;
}
int dfs(int x,int visited[],int cnt[],int nc[],int N,vector p,vector v[])
{
visited[x]=1;
cnt[x]=nc[x]+1+cnt[p[x]];
for(int i=0;i<v[x].size();i++)
{
if(visited[v[x][i]]==0)
{
dfs(v[x][i],visited,cnt,nc,N,p,v);
}
}
}
main()
{
int t;
cin>>t;
while(t–)
{
int n;
cin>>n;
vector p;
p.pb(0);
p.pb(1);
for(int i=1;i<=n-1;i++)
{
int x;
cin>>x;
p.pb(x);
}
vector v[n+1];
for(int i=2;i<=n;i++)
{
v[p[i]].pb(i);
}
int cnt[n+1]={0};
int nc[n+1]={0};
numc(1,nc,v);
/* for(int i=1;i<=n;i++)
{
cout<<nc[i]<< " ";
}*/
int visited[n+1]={0};
dfs(1,visited,cnt,nc,n,p,v);
sort(cnt,cnt+n+1);
cout<<cnt[n]<<endl;
}
}