1001.Tree
爆搜
#include<bits/stdc++.h>
using namespace std;
#define ll long long
const long long N=5e5+10;
ll n,t;
ll a[N];
ll vis[N];
ll max1=0,ans=0,vvis[N],q[N];
vector<ll>p[N];
void dfs(ll i,ll x)
{
if(p[i].size()==0)
{
vvis[i]=1;
q[i]=n-1;
return ;
}
for(ll u=0;u<p[i].size();u++)
{
if(vis[p[i][u]]==0)
{
vis[p[i][u]]=1;
dfs(p[i][u],x+1);
vvis[i]+=vvis[p[i][u]];
q[i]=max(q[i],q[p[i][u]]);
}
}
vvis[i]+=1;
q[i]+=n-vvis[i];
}
int main()
{
scanf("%lld",&t);
while(t--)
{
scanf("%lld",&n);
if(n==1)
{
printf("1\n");
continue;
}
for(ll i=1;i<=n;i++)
{
p[i].clear();
vis[i]=0;
vvis[i]=0;
q[i]=0;
}
for(ll i=2;i<=n;i++)
{
scanf("%lld",&a[i]);
p[a[i]].push_back(i);
}
vis[1]=1;
max1=0;
dfs(1,1);
ans=0;
for(int i=1;i<=n;i++)
{
ans+=vvis[i];
}
ans+=q[1];
printf("%lld\n",ans);
}
return 0;
}