Pagini recente » Cod sursa (job #522185) | Cod sursa (job #1048647) | Cod sursa (job #2265623) | Cod sursa (job #570163) | Cod sursa (job #1268717)
#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();
for(int i = 1; i <= n; ++i)
{
if(!t[i])
{
Dfs(i);
break;
}
}
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)
{
is >> x >> y;
g[x].push_back(y);
t[y] = x;
}
}
void Write()
{
for(int i = 1; i <= n; ++i)
{
os << f[i] << ' ';
}
return;
}
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--;
}