Pagini recente » Cod sursa (job #2865168) | Cod sursa (job #644224) | Cod sursa (job #3132569) | Cod sursa (job #2891868) | Cod sursa (job #1037391)
//
// main.cpp
// cerere
//
// Created by Catalina Brinza on 11/18/13.
// Copyright (c) 2013 Catalina Brinza. All rights reserved.
//
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
ifstream f("cerere.in");
ofstream g("cerere.out");
vector <int> v[100001];
int cer[100001];
int a[100001];
int n;
void df(int x,int tata,int buni)
{
if (a[x]==0) cer[x]=0;
else if (a[x]==1) cer[x]=1+cer[tata];
else cer[x]=1+cer[buni];
int i=0;
while (v[x].size()!=0 && i!=v[x].size())
{df(v[x][i],x,tata); i++;}
}
int main()
{int i,y,x;
bool rad[100001];
f>>n;
for (i=1;i<=n;i++)
{ f>>a[i]; rad[i]=false;}
for (i=0;i<n-1;i++)
{
f>>x>>y;
rad[y]=true;
v[x].push_back(y);
}
for(i=1;i<=n;i++)
if (rad[i]==0) break;
int root=i;
df(root,0,0);
for (i=1;i<=n;i++) g<<cer[i]<<' ';
return 0;
}