Cod sursa(job #2916334)

Utilizator MihaiVIIIIlinca Mihai MihaiVIII Data 29 iulie 2022 12:31:27
Problema Cerere Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.37 kb
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;

void dfs(int nod,int *a, vector<vector<int>> v,vector<int> stiva,int *rez)
{
    int aux = 0;
    int stramos,n = nod,i = 0;
    while (1)
    {
        if (a[nod -1] == 0)
        {
            break;
        }
        i++;
        stramos = stiva[stiva.size() - a[n-1] - aux];
        n = stramos;
        aux = aux + a[nod - 1];
        if (a[stramos - 1] == 0)
        {
            break;
        }
    }
    rez[nod-1] = i;
    stiva.push_back(nod);
    for (int i = 0; i < v[nod].size(); i++)
    {
        dfs(v[nod][i],a,v,stiva,rez);
    }
}

int main()
{
    ifstream in("cerere.in");
    ofstream out("cerere.out");
    int n;
    in >> n;
    int a[n],maimute[n] = {0},m,rez[n];
    vector <vector<int>> v(n+1);
    for (int i = 0; i < n; i++)
    {
        in >> a[i];
    }
    for (int i = 0; i < n-1; i++)
    {
        int aux1,aux2;
        in >> aux1 >> aux2;
        maimute[aux2-1]++;
        v[aux1].push_back(aux2);
    }
    for (int i = 0; i < n; i++)
    {
        if (maimute[i] == 0)
        {
            m = i + 1;
        }
        
    }
    vector<int> stiva;
    dfs(m,a,v,stiva,rez);

    for (int i = 0; i < n; i++)
    {
        out << rez[i] << " ";
    }
    

    in.close();
    out.close();
    return 0;
}