Pagini recente »
Monitorul de evaluare
|
Rating Cojocariu Dragos (dragoscojocariu)
|
2020-04-03-clasa-5-concurs
|
Cod sursă (job #803979)
Cod sursă (job
#803979)
#include <fstream>
#include <vector>
using namespace std;
ifstream in("burlane.in");
ofstream out("burlane.out");
const int NMAX = 1e5;
struct burlan{
vector <int> tata;
int fiu, val;
} v[NMAX + 1];
int n, q, cer;
int solve(int burlan, int cnt){
if(burlan == 0){
return 0;
}
if(v[burlan].val){
return v[burlan].val;
}
v[burlan].val =1 + solve(v[burlan].fiu, cnt + 1);
return v[burlan].val;
}
void update(int nod){
v[nod].val = 0;
for(int j = 0;j<v[nod].tata.size();j++){
update(v[nod].tata[j]);
}
}
void process(){
in>>n>>q;
for(int i = 1;i<=n;i++){
in>>v[i].fiu;
v[v[i].fiu].tata.push_back(i);
}
int a, b;
for(int i = 0;i<q;i++){
in>>cer;
if(cer == 1){
in>>a;
out<<solve(a, 0)<<"\n";
}else{
in>>a>>b;
v[a].fiu = b;
v[a].val = 0;
solve(a, 0);
for(int j = 0;j<v[i].tata.size();j++){
update(v[i].tata[j]);
}
}
}
}
int main(){
process();
return 0;
}