Cod sursa(job #1906121)

Utilizator raulmuresanRaul Muresan raulmuresan Data 6 martie 2017 12:24:37
Problema Cerere Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.15 kb
//A fost necesar sa folosesc hash de mana
#include<fstream>
#include<vector>
#include<string>
#include<algorithm>
#define modulo 666013

using namespace std;

ifstream fin("cerere.in");
ofstream fout("cerere.out");


string sir;
int i, n, k, j,sol,x,y;
int value[100005], tata , fiu, sum;
int d[100005], stramos[100005];
vector <int> v[100090];
int st[100005], dr, nr[100005];


void dfs(int nod)
{
    st[++dr] = nod;
    if(nr[nod] == 0)
    {
        nr[nod] = nr[st[dr - stramos[nod]]] + 1;
    }

    for(int i=0;i<v[nod].size();i++)
    {
        dfs(v[nod][i]);
    }
    dr--;
}


int main()
{
    sol = 0;
    fin >> n;
    for(i = 1; i <= n; i++)
    {
        fin >> stramos[i];
        if(stramos[i] == 0)
        {
            nr[i] = 1;
        }

    }
    for(i = 1; i <= n - 1; i++)
    {
        fin >> tata >> fiu;
        v[tata].push_back(fiu);
        d[fiu] = 1;
    }
    int radacina = -1;
    for(i = 1; i <= n; i++)
    {
        if(d[i] == 0)
            radacina = i;
    }
    dr = 0;
    dfs(radacina);
    for(i = 1; i <= n; i++)
    {
        fout << nr[i] - 1 << " ";
    }
}