#include<iostream>
#include<queue>
using namespace std;
int used[100000];
long parent[100000];
queue<long>podchineni[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]++;
podchineni[parent[i]].push(i);
}


cin>>q;
for(l=0;l<q;l++)
{
    cin>>x>>a>>b;
    
    if(x==1)
    {
        a++;
    part[a]=b;
    while(!podchineni[a].empty())
    {
        j=podchineni[a].front();
        podchineni[a].pop();
    }
    
    
    for(i=0;i<=n;i++)
    {
        if(parent[i]==a && part[a]==part[i])
        {
            podchineni[a].push(i);
        }
    }
     
    if(part[parent[a]]==part[a])
    {
    }
    
    }
    
    
    
    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<=n;i++)
{for(j=0;j<=n;j++)
cout<<vryzki[i][j]<<' ';
cout<<endl;
    }
    cout<<endl;
for(i=1;i<=n;i++)
cout<<parent[i];
cout<<endl;*/
for(i=0;i<br;i++)
{cout<<s[i].c<<endl;
}

return 0;
}


