#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
using namespace std;
typedef long long ll;
ll n, a[1000005], l[1000005], r[1000005], cnt[1000005], maxn = 0;
string sl[1000005], sr[1000005];
ll size(ll x) {
if (cnt[x] != 0) return cnt[x];
cnt[x] = 1;
if (l[x] != -1) cnt[x] += size(l[x]);
if (r[x] != -1) cnt[x] += size(r[x]);
return cnt[x];
}
string left(ll x) {
if (sl[x] != "") return sl[x];
if (l[x] != -1) {
sl[x] += left(l[x]);
sl[x].push_back(' ');
}
sl[x] += a[x];
if (r[x] != -1) {
sl[x].push_back(' ');
sl[x] += left(r[x]);
}
return sl[x];
}
string right(ll x) {
if (sr[x] != "") return sr[x];
if (r[x] != -1) {
sr[x] += right(r[x]);
sr[x].push_back(' ');
}
sr[x] += a[x];
if (l[x] != -1) {
sr[x].push_back(' ');
sr[x] += right(l[x]);
}
return sr[x];
}
int main() {
scanf("%lld", &n);
for (ll i = 1; i <= n; ++i) {
scanf("%lld", &a[i]);
}
for (ll i = 1; i <= n; ++i) {
scanf("%lld%lld", &l[i], &r[i]);
}
left(1);
right(1);
size(1);
for (ll i = 1; i <= n; ++i) {
if ((l[i] == -1 && r[i] == -1) || (l[i] != -1 && r[i] != -1 && sl[l[i]] == sr[r[i]])) {
maxn = max(maxn, cnt[i]);
}
}
printf("%lld", maxn);
return 0;
}
悬关