#include<iostream>
#include<queue>
using namespace std;
long parent[100000];
struct stringove{
                string c;
                }s[200000];

long n,q,a,b,x,br;
long part[100000];
long visited[100000];
void nul()
{
    long i;
    for(i=0;i<n;i++)
    visited[i]=0;
}
void dfs(int i)
{
 for(i=0;i<=n;i++)
    {
        if( part[a]==part[i] && parent[i]==a && visited[i]==0){visited[i]=1;dfs(i);}
    }
    if(part[parent[a]]==part[a])
dfs(parent[a]);
}
int main()
{

long i,l,j;



cin>>n;
for(i=1;i<=n;i++)
{cin>>parent[i];
parent[i]++;
}


cin>>q;
for(l=0;l<q;l++)
{
    cin>>x>>a>>b;
    
    if(x==1)
    {
        a++;
    part[a]=b;
    }
    
    
    
    if(x==2)
    {
        nul();
        a++;
        b++;
        dfs(a);
        //cout<<"bqh v DFS"<<endl;
        if(visited[b]==1)
        s[br].c="YES";
        if(visited[b]==0)
        s[br].c="NO";
        br++;
    }
}



for(i=0;i<br;i++)
{cout<<s[i].c<<endl;
}

return 0;
}


