为什么爆空间
查看原帖
为什么爆空间
257563
Harry_8810楼主2020/9/26 21:30

数组是按照题目数据大小开的,是不是有其他的地方占了太多空间?

#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;
}

2020/9/26 21:30
加载中...