Cod sursa(job #959871)

Utilizator cnt_tstcont teste cnt_tst Data 9 iunie 2013 10:15:56
Problema Cerere Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.83 kb
#include<fstream>
#include<vector>
#define DIM 100010

using namespace std;
ifstream fin("cerere.in");
ofstream fout("cerere.out");
vector<int>L[DIM];
int d[DIM];//d[i]=rezultatul cerut pt nodul i
int v[DIM],p[DIM],viz[DIM],x,y,i,r[DIM],n;
void dfs(int x,int niv)
{
    p[niv]=x;
    viz[x]=1;
    if(v[x]==0)
        d[x]=0;
    else
        d[x]=1+d[p[niv-v[x]]];
    for(int i=0;i<L[x].size();i++)
    {

        if(viz[L[x][i]]==0)
            dfs(L[x][i],niv+1);
    }


}


int main()
{
    fin>>n;
    for(i=1;i<=n;i++)
    fin>>v[i];
    for(i=1;i<n;i++)
    {

        fin>>x>>y;
        L[x].push_back(y);
        r[y]=1;
    }
    for(i=1;i<=n;i++)
        if(r[i]==0){
            dfs(i,1);
            break;
        }
    for(i=1;i<=n;i++)
        fout<<d[i]<<" ";

    return 0;
}