Pagini recente » Cod sursa (job #3289360) | Cod sursa (job #2981359) | Cod sursa (job #2773717) | Cod sursa (job #1942865) | Cod sursa (job #1268715)
#include <fstream>
#include <vector>
#include <queue>
using namespace std;
ifstream is("cerere.in");
ofstream os("cerere.out");
int n;
vector<vector<int>> g;
vector<int> t;
vector<int> s;
vector<int> c;
vector<int> f;
int cnt;
void Read();
void Write();
void Dfs(int x);
int main()
{
Read();
Dfs(1);
Write();
is.close();
os.close();
return 0;
}
void Read()
{
is >> n;
g = vector <vector <int>>(n+1);
t = vector <int>(n+1);
c = vector <int>(n+1);
s = vector <int>(n+1);
f = vector <int>(n+1);
int x, y;
for(int i = 1; i <= n; ++i)
{
is >> x;
c[i] = x;
}
//for(int i = 1; i <= n; ++i)
//os << c[i] << ' ';
for(int i = 1; i < n; ++i)
{
is >> x >> y;
g[x].push_back(y);
t[y] = x;
}
}
void Write()
{
for(int i = 1; i <= n; ++i)
{
os<< f[i] <<' ';
}
return;
}
/*
* for(vector<int>::iterator y = g[i].begin(); y != g[i].end(); ++y)
os << i << ' ' << *y << ' ';
os<<'\n';
*/
void Dfs(int x)
{
cnt++;
s[cnt] = x;
if(c[x] == 0)
f[x] = 0;
if(c[x] != 0)
{
f[x] = f[s[cnt - c[x]]] + 1;
}
for(vector<int>::iterator y = g[x].begin(); y != g[x].end(); ++y)
{
Dfs(*y);
}
cnt--;
}