Cod sursa(job #830727)

Utilizator roots4Irimia Alexandru Gabriel roots4 Data 7 decembrie 2012 16:15:36
Problema Cerere Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.84 kb
#include<fstream>
#include<vector>
#define DIM 100010
 
using namespace std;
 
 
int n , i , K[DIM],a,b;
 
 
ifstream f("cerere.in");
ofstream g("cerere.out");
 
vector<int>L[DIM];
int stack[DIM];
int k;
int Str[DIM],Sol[DIM];
void dfs(int x,int ant){
    stack[++k]=ant;
    if(K[x]==0)
        Str[x]=0;
    else
        Str[x]=stack[k-K[x]+1];
    for(unsigned int i=0;i<L[x].size();i++){
        dfs(L[x][i],x);
        k--;
    }
}
 
int find_sol(int nod){
	int k=0;
	while(Str[nod]!=0){
		nod=Str[nod];
		k++;
	}
	return k;
}
 
int main(){
     
    f>>n;
    for(i=1;i<=n;i++)
        f>>K[i];
     
    for(i=1;i<n;i++){
        f>>a>>b;
        L[a].push_back(b);
    }
     
    dfs(1,0);
     
    for(i=1;i<=n;i++){
        Sol[i]=find_sol(i);
        g<<Sol[i]<<" ";
    }
     
    return 0;
}