Cod sursa(job #3359926)

Utilizator Maya_PopaPopa Maya Diana Maya_Popa Data 6 iulie 2026 15:55:42
Problema Cerere Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.93 kb
#include <fstream>
#include <vector>
#define MAX 100003

using namespace std;
ifstream fin ("cerere.in");
ofstream fout ("cerere.out");
int v[MAX];
int sol[MAX];
int tata[MAX];
vector<int> adj[MAX];
vector<int> drum;
void dfs (int x) {
    drum.push_back(x);
    if (v[x]==0) {
        sol[x]=0;
    } else {
        int idx=drum.size()-1-v[x];
        int s=drum[idx];
        sol[x]=sol[s]+1;
    }
    for (int i:adj[x]) {
        dfs(i);
    }
    drum.pop_back();
}
int main() {
    int n,i,a,b,r;
    fin>>n;
    for (i=1; i<=n; i++) {
        fin>>v[i];
    }
    for (i=0; i<n-1; i++) {
        fin>>a>>b;
        adj[a].push_back(b);
        tata[b]=a;
    }
    r=1;
    for (i=1; i<=n; i++) {
        if (tata[i]==0) {
            r=i;
            break;
        }
    }
    v[r]=0;
    dfs(r);
    for (i=1; i<=n; i++) {
        fout<<sol[i]<<" ";
    }
    fout<<endl;
    return 0;
}