constint maxn=100005,maxe=maxn; int n,m,w[maxn],a[maxn],lnk[maxn][2],g[maxn]; voiddfs(int x){ if (lnk[x][0]) dfs(lnk[x][0]); a[++m]=w[x]; if (lnk[x][1]) dfs(lnk[x][1]); } intmain(){ scanf("%d",&n); for (int i=1;i<=n;i++) scanf("%d",&w[i]); for (int i=2,fa,s;i<=n;i++) scanf("%d%d",&fa,&s),lnk[fa][s]=i; dfs(1); for (int i=1;i<=n;i++) a[i]-=i; int len=1;g[1]=a[1]; for (int i=2;i<=n;i++) if (g[len]<=a[i]) g[++len]=a[i];else *upper_bound(g+1,g+1+len,a[i])=a[i]; printf("%d",n-len); return0; }