Cod sursa(job #1435737)

Utilizator andi12Draghici Andrei andi12 Data 14 mai 2015 11:52:31
Problema Cerere Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.85 kb
#include <cstdio>

using namespace std;
const int N=100001;
int vf[N];
int urm[2*N];
int lst[2*N];
int nr;
int str[N];
int v[N];
int sol[N];
bool viz[N];
void ad(int x,int y)
{
    nr++;
    vf[nr]=y;
    urm[nr]=lst[x];
    lst[x]=nr;
}
void dfs(int x)
{
    int poz=lst[x];
    v[++nr]=x;
    viz[x]=true;
    while(poz!=0)
    {
        if(str[vf[poz]]!=0)
        {
            sol[vf[poz]]=1+sol[v[nr-str[vf[poz]]]];
        }
        dfs(poz);
        poz=urm[poz];
    }
}
int main()
{
    FILE *in,*out;
    in=fopen("cerere.in","r");
    out=fopen("cerere.out","w");
    int n,i,j,x,y;
    fscanf(in,"%d",&n);
    for(i=1;i<=n;i++)
        fscanf(in,"%d",&str[i]);
    for(i=1;i<=n;i++)
    {
        fscanf(in,"%d%d",&x,&y);
        ad(x,y);
        ad(y,x);
    }
    nr=0;
    dfs(1);
    for(i=1;i<=n;i++)
        fprintf(out,"%d ",sol[i]);
    return 0;
}