直接并查集即可.

#include <bits/stdc++.h>
using namespace std;
const int N=105;
int fa[N],a[N],d[N];
int f(int x)
{
    if(x==fa[x]) return x;
    else         return fa[x]=f(fa[x]);
}

int main()
{
    int n;
    scanf("%d",&n);
    for(int i=1;i<=n;i++)   scanf("%d",&a[i]);
    for(int i=1;i<=n;i++)   scanf("%d",&d[i]);
    for(int i=1;i<=n;i++)   fa[i]=i;
    //同一个祖先的点可以相互交换..
    for(int i=1;i<=n;i++)
    {
        int tx=i+d[i],ty=i-d[i];
        if(tx<=n)
        {
            if(f(i)!=f(tx))
            {
                fa[f(tx)]=f(i);
            }
        }
        if(ty>0)
        {
            if(f(i)!=f(ty))
            {
                fa[f(ty)]=f(i);
            }
        }
    }
    int flag=1;
    for(int i=1;i<=n;i++)
    {
        if(f(a[i])!=f(i))   flag=0;
    }
    flag==1?puts("YES"):puts("NO");
    return 0;
}