#include<iostream>
using namespace std;

int n,q,x,a,b;
int boss[100005];
int partiq[100005];

bool ans[200005];
int ansi;

bool visited[100005];
bool possible;

void DFS(int from,int to)
{
   int i;
    
   visited[from]=true;
   
   for(i=0;i<n;i++)
      if(visited[i]==false && boss[i]==from && partiq[from]==partiq[i] && partiq[from]!=0)
      {
         visited[i]=true;
         if(i==to){ possible=true;
                    return;        }
         DFS(i,to);
      }
   
   if(boss[from]!=-1)i=boss[from];
   if(visited[i]==false && partiq[from]==partiq[i] && partiq[from]!=0)
      {
         visited[i]=true;
         if(i==to){possible=true;
                   return;}
         DFS(i,to);
      }
}

int main()
{
   int i,j;
    
   cin>>n;
   for(i=0;i<n;i++){ cin>>q;
                     boss[i]=q; }
   
   cin>>q;
   for(i=0;i<q;i++)
   {
      cin>>x>>a>>b;
      
      if(x==1)partiq[a]=b;
      else
      {
         for(j=0;j<n;j++)visited[j]=false;
         possible=false;
         
         DFS(a,b);
         
         if(possible==true)ans[ansi]=true;
         ansi++;
      }
   }
    
   for(i=0;i<ansi;i++)
      if(ans[i]==true) cout<<"YES"<<endl;
      else             cout<<"NO"<<endl;      
          
   return 0;
}