5分求助
查看原帖
5分求助
676561
albertww楼主2022/8/16 18:04
#include <iostream>
using namespace std;
int n,num[1000005],l[1000005],r[1000005];
int cnt[1000005],ans=1;
int dfs(int x)
{
	if (x==-1)
		return 0;
	cnt[x]=dfs(l[x])+dfs(r[x])+1;
}
bool srh(int x)
{
	if (l[x]==-1&&r[x]==-1)
	{
		ans=max(ans,cnt[x]);
		return true;
	}
	if (l[x]==-1||r[x]==-1)
		return false;
	if (num[l[x]]==num[r[x]]&&srh(l[x])&&srh(r[x]))
	{
		ans=max(ans,cnt[x]);
		return true;
	}
	return false;
}
int main()
{
	cin >> n;
	for (int i=1;i<=n;i++)
		cin >> num[i];
	for (int i=1;i<=n;i++)
		cin >> l[i] >> r[i];
	dfs(1);
	srh(1);
	cout << ans;
	return 0;
}
2022/8/16 18:04
加载中...