Cod sursa(job #1942312)
Utilizator | Data | 27 martie 2017 21:49:39 | |
---|---|---|---|
Problema | Cerere | Scor | 0 |
Compilator | cpp | Status | done |
Runda | Arhiva de probleme | Marime | 0.56 kb |
#include <iostream>
#include <fstream>
#include <vector>
#define N 100005
#define pb push_back
using namespace std;
ifstream in("cerere.in");
ofstream out("cerere.out");
vector<int> v[N], s;
int n, c[N], r[N];
void dfs(int x){
if(c[x]>0)r[x]=1+r[s[s.size()-c[x]]];
s.pb(x);
for(int i=0; i<v[x].size(); i++)dfs(v[x][i]);
s.pop_back();
}
int main(){
in>>n;
int x, y;
for(int i=1; i<=n; i++)in>>c[i];
for(int i=1; i<n; i++)in>>x>>y,v[x].pb(y);
dfs(1);
for(int i=1; i<=n; i++)out<<r[i]<<" ";
return 0;
}