Cod sursa(job #1438301)

Utilizator turbowin120Amarandei-Stanescu Alexandru turbowin120 Data 19 mai 2015 16:31:06
Problema Cerere Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.95 kb
#include <iostream>
#include <stdio.h>
using namespace std;
const int N=100420;
int n,nr,vf[N],urm[N],lst[N],a,b,v[N],r[N],rad;
int tata[N],drum[N];
bool ver[N];

void afisare(){
    FILE * out;
    out=fopen("cerere.out","w");
    for(int i=1;i<=n;i++) fprintf(out,"%d ",r[i]);

}


void adauga(int x, int y){
    nr++;
    vf[nr]=y;
    urm[nr]=lst[x];
    lst[x]=nr;

}

void citire(){
    FILE *in;
    in=fopen("cerere.in","r");
    fscanf(in,"%d",&n);
    for(int i=1;i<=n;i++) fscanf(in,"%d",&v[i]);
    for(int i=1;i<n;i++){
        fscanf(in,"%d%d",&a,&b);
        adauga(a,b);
        tata[b]=a;
        ver[b]=1;
    }
    for(int i=1;i<=n;i++) if(ver[i]==0) rad=i;



}

void dfs(int nod, int poz){
    drum[poz]=nod;
    if(v[nod]!=0) r[nod]=r[drum[poz-v[nod]]]+1;
    int y,p;
    p=lst[nod];
    while(p!=0){
        y=vf[p];

        dfs(y,poz+1);
        p=urm[p];

    }cout<<1;

}


int main()
{
    citire();
    dfs(rad,0);
    afisare();
    return 0;
}