数组是按照题目数据大小开的,是不是有其他的地方占了太多空间?
#include<bits/stdc++.h>
using namespace std;
int v[1000005],l[1000005],r[1000005];
int tong(int star)
{
if(star==-1)return 0;
return tong(l[star])+tong(r[star])+1;
}
bool dfs(int tl,int tr)
{
if(l[tl]==-1&&r[tl]==-1&&l[tr]==-1&&r[tr]==-1&&v[tl]==v[tr])return true;
if(l[tl]==-1&&r[tl]==-1&&l[tr]==-1&&r[tr]==-1)return v[tl]==v[tr];
if(l[tl]!=-1&&r[tl]!=-1&&l[tr]==-1&&r[tr]==-1)
{
if(v[tl]==v[tr])return dfs(l[tl],r[tr]);
}
if(l[tl]==-1&&r[tl]==-1&&l[tr]!=-1&&r[tr]!=-1)
{
if(v[tl]==v[tr])return dfs(r[tl],l[tr]);
}
if(v[l[tl]]==v[r[tr]]&&v[r[tl]]==v[l[tr]])
{
if(dfs(l[tl],r[tr])&&dfs(l[tl],r[tr]))return true;
}
return false;
}
int main()
{
int n,Max=-10;
scanf("%d",&n);
for(int i=1;i<=n;i++)scanf("%d",&v[i]);
for(int i=1;i<=n;i++)scanf("%d%d",&l[i],&r[i]);
for(int i=1;i<=n;i++)
{
if(dfs(i,i))Max=max(Max,tong(i));
}
cout<<Max;
return 0;
}