Cod sursa(job #1074605)

Utilizator cdascaluDascalu Cristian cdascalu Data 7 ianuarie 2014 19:35:14
Problema Cerere Scor 100
Compilator cpp Status done
Runda Teme Pregatire ACM Unibuc 2013 Marime 0.81 kb
#include<fstream>
#include<vector>
#include<bitset>
#define MAX 100001
using namespace std;
int N,V[MAX],R[MAX],niv = 0,ST[MAX];
vector<int> S[MAX];
bitset<MAX> viz;
void read()
{
    ifstream f("cerere.in");
    f>>N;
    int i,x,y;
    for(i=1;i<=N;++i)
        f>>V[i];
    for(i=1;i<N;++i)
    {
        f>>x>>y;
        S[x].push_back(y);
        viz[y] = 1;
    }
    f.close();
}
void df(int x)
{
    ++niv;
    ST[niv] = x;
    R[x] = R[ST[niv-V[x]]] + 1;
    if(V[x] == 0)
        R[x] = 0;
    for(vector<int>::iterator it = S[x].begin();it!=S[x].end();++it)
    {
        df(*it);       
    }
    --niv;
}
int main()
{
    read();
    int i;
    for(i=1;i<=N;++i)
    if(!viz[i])
    {df(i);i=N+1;}
     
    ofstream g("cerere.out");  
    for(niv = 1;niv<=N;++niv)
        g<<R[niv]<<" ";
    g.close();
    return 0;
}