Pagini recente » Cod sursa (job #1721229) | Cod sursa (job #1951209) | Cod sursa (job #1363837) | Cod sursa (job #854470) | Cod sursa (job #1906118)
//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)
{
//fout << nod <<" "<<st[dr - stramos[nod]]<<"\n";
nr[nod] = nr[st[dr - stramos[nod]]] + 1;
}
//fout << nod << " ";
for(int i=0;i<v[nod].size();i++)
{
//fout<<v[nod][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);
//fout << tata<<" "<<fiu<<"\n";
d[fiu] = 1;
}
int radacina = -1;
for(i = 1; i <= n; i++)
{
if(d[i] == 0)
radacina = i;
//fout << d[i] << " ";
}
//fout << radacina << "\n";
dr = 0;
dfs(radacina);
for(i = 1; i <= n; i++)
{
fout << nr[i] - 1 << " ";
}
}