Pagini recente » Cod sursa (job #523052) | Monitorul de evaluare | Cod sursa (job #998022) | Cod sursa (job #930805) | Cod sursa (job #1906121)
//A fost necesar sa folosesc hash de mana
#include<fstream>
#include<vector>
#include<string>
#include<algorithm>
#define modulo 666013
using namespace std;
ifstream fin("cerere.in");
ofstream fout("cerere.out");
string sir;
int i, n, k, j,sol,x,y;
int value[100005], tata , fiu, sum;
int d[100005], stramos[100005];
vector <int> v[100090];
int st[100005], dr, nr[100005];
void dfs(int nod)
{
st[++dr] = nod;
if(nr[nod] == 0)
{
nr[nod] = nr[st[dr - stramos[nod]]] + 1;
}
for(int i=0;i<v[nod].size();i++)
{
dfs(v[nod][i]);
}
dr--;
}
int main()
{
sol = 0;
fin >> n;
for(i = 1; i <= n; i++)
{
fin >> stramos[i];
if(stramos[i] == 0)
{
nr[i] = 1;
}
}
for(i = 1; i <= n - 1; i++)
{
fin >> tata >> fiu;
v[tata].push_back(fiu);
d[fiu] = 1;
}
int radacina = -1;
for(i = 1; i <= n; i++)
{
if(d[i] == 0)
radacina = i;
}
dr = 0;
dfs(radacina);
for(i = 1; i <= n; i++)
{
fout << nr[i] - 1 << " ";
}
}