Cod sursă (job #803979)

Utilizator avatar Mihai00700 Mihai Mihai00700 IP ascuns
Problemă Burlane Compilator cpp-32 | 1,10 kb
Rundă Arhiva de probleme Status evaluat
Dată 11 ian. 2025 19:35:10 Scor 0
#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;
}