Cara, copiei o código errado me desculpe, a respeito dessas variáveis sem "dicas",é porque isso se trata de um código para competição,não para uma empresa então eu tenho que fazer o mais rápido possível e o usuário não precisa de "dicas".
#include<bits/stdc++.h>
using namespace std;
int npre=1,menor=101;
const int k=501;
int pre[k],idade[k];
class grafo{
int v;
list<int> *adj;
public:
grafo(int v);
void adicionararesta(int v1,int v2);
void troca(int v1,int v2);
void dfs(int x);
};
grafo::grafo(int v){
this->v=v+1;
adj= new list<int>[v+1];
}
void grafo::adicionararesta(int v1,int v2){
adj[v2].push_front(v1);
}
void grafo::troca(int v1,int v2){
adj[v1].swap(adj[v2]);
for(int i=1;i<k+1;i++){
if(i==v1) continue;
if(i==v2) continue;
for(list<int>:: iterator it=adj.begin();it!=adj.end();it++){
if(*it==v1)*it=v2;
else if(*it==v2)*it=v1;
}
}
}
void grafo::dfs(int x){
pre[x]=npre++;
for(int w:adj[x]){
if(pre[w]==-1) dfs(w);
if(idade[w]<menor) menor=idade[w];
}
}
int main(){
int k,r,a,b,c;//K=n vertice,r=n relacoes,c= n comandos
cin>>k>>r>>c;
grafo grafo(k+1);
for(int i=1;i<k+1;i++){
cin>>idade;
}
for(int i=0;i<r;i++){
cin>>a>>b;
grafo.adicionararesta(a,b);
}
while(c--){
char cmd;
cin>>cmd;
if(cmd=='T'){
cin>>a>>b;
grafo.troca(a,b);
}
else{
memset(pre,-1,sizeof(pre));
npre=1;
menor=101;
cin>>a;
grafo.dfs(a);
if(menor!=101) cout<<menor;
else cout<<"*";
}
}
return 0;
}
link da questão:https://olimpiada.ic.unicamp.br/pratique/p2/2017/f1/chefe/