Cod sursa(job #1048027)

Utilizator leontinLeontin leontin Data 5 decembrie 2013 10:31:41
Problema Cerere Scor 95
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.99 kb
#include<iostream>
#include<cstdio>
#include<vector>
using namespace std;
vector<int>v[100000];
int rad,  q[100000], g[100000], prim, ultim, k=0, nr[100000];
bool viz[100000];

void DF(int nod)
{
    int i;
    ultim++;
    q[ultim]=nod;
    nr[nod]=nr[q[ultim-g[nod]]]+1;
    int z=v[nod].size();
    for(i=0; i<z; i++)
    {
        DF(v[nod][i]);
    }
    ultim--;
}
int main()
{
    int n, i, x, y;
    FILE *fin, *fout;
    fin=fopen("cerere.in", "r");
    fout=fopen("cerere.out", "w");
    fscanf(fin, "%d", &n);
    for(i=1; i<n+1; i++)
    {
        fscanf(fin, "%d", &g[i]);
        viz[i]=false;
    }
    for(i=1; i<n; i++)
    {
        fscanf(fin, "%d%d", &x, &y);
        v[x].push_back(y);
        viz[y]=true;
    }
    for(i=1; i<n+1; i++)
        if(viz[i]==false)
            rad=i;
    for(i=1; i<n+1; i++)
    {
        nr[i]=0;
    }
    prim=1;
    ultim=0;
    DF(rad);
    for(i=1; i<n+1; i++)
        fprintf(fout, "%d ", nr[i]-1);


}