rt
/*
ID: Sean du [duyu9092]
TASK: test
LANG: C++
*/
#include <bits/stdc++.h>
using namespace std;
#define int long long
int n,s,len=1,top=1,stk[1000009],f[1000009],a[1000009],b[1000009],lc[1000009],rc[1000009];
bool v[1000009];
void bfs()
{
int x;
stk[1]=1;
while(top>0)
{
x=stk[top];
if(lc[x]&&!v[lc[x]])
{
stk[++top]=lc[x];
continue ;
}
b[++s]=a[x];
b[s]-=s;
v[x]=1;
top--;
if(rc[x]&&!v[rc[x]])
{
stk[++top]=rc[x];
continue ;
}
}
}
signed main()
{
// ofstream fout ("test.out");
// ifstream fin ("test.in");
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a[i];
}
for(int i=2;i<=n;i++)
{
int prt,d;
cin>>prt>>d;
if(d) rc[prt]=i;
else lc[prt]=i;
}
bfs();
f[1]=b[1];
for(int i=2;i<=n;i++)
{
if(b[i]>=f[len]) f[++len]=b[i];
else
{
int l=1,r=len;
while(l<=r)
{
int mid=l+r<<1;
if(f[mid]<=b[i]) l=mid+1;
else r=mid-1;
}
f[l]=b[i];
}
}
cout<<n-len<<endl;
return 0;
}