Pagini recente » Monitorul de evaluare | Istoria paginii utilizator/sabina0908 | Monitorul de evaluare | Monitorul de evaluare | Cod sursa (job #1036215)
#include <fstream>
#include <stack>
#include <vector>
using namespace std;
ifstream fin("cerere.in");
ofstream fout("cerere.out");
int N, str[100005];
int v[100005];
vector<int> lv[100005];
int s[100005];
int top;
void DF(int r)
{
int i;
int l = lv[r].size();
s[++top] = r;
for( i = 0; i < l; i++)
{
int x;
x = lv[r][i];
if( !v[ x])
if(str[x])v[ x] = v[s[top - str[x]+1]] + 1;
else v[x] = 1;
DF(x);
}
--top;
}
int main()
{
int i, sol = 0, N, x, r;
fin>> N;
for(i = 1; i <= N; i++)
fin>>str[i];
for(i = 1; i < N; i++)
{
int x, y;
fin >> x>> y;
lv[x].push_back(y);
v[y] = 1;
}
for( i = 1; i <= N; i++)
if(!v[i]) r = i;
else v[i] = 0;
v[r] = 1;
DF( r);
for( i = 1; i <= N; i++)
fout<<v[i] - 1<<" ";
return 0;
}