Pagini recente » Cod sursa (job #972009) | Cod sursa (job #2684256) | Cod sursa (job #1944301) | Cod sursa (job #1026925) | Cod sursa (job #2218307)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
//ifstream fin("omegalul.in");
//ofstream fout("omegalul.out");
ifstream fin("cerere.in");
ofstream fout("cerere.out");
const long N = 100001; //INF = 2e9;
int n;
vector <int> a[N], asc;
int d[N];
void cit()
{
asc.push_back(0);
fin>>n;
for (int i=1; i<=n; i++)
{
int k;
fin>>k;
asc.push_back(k);
}
for (int i=1; i<n; i++)
{
int x, y;
fin>>x>>y;
a[y].push_back(x);
}
}
void dfs(int x, int up)
{
d[x] = 1;
int curasc = x, y;
while (up)
{
y = a[curasc][0];
if (y != 1) curasc = y;
//cout<<x<<" "<<up<<" "<<y<<" "<<curasc<<"\n";
up--;
}
d[x] += d[y];
return;
}
int main()
{
cit();
d[1] = 0;
fout<<"0 ";
for (int i=2; i<=n; i++)
{
//cout<<i<<" / "<<n<<" "<<asc[i]<<" asc\n";
if (asc[i] == 0) d[i] = 0;
else dfs(i, asc[i]);
fout<<d[i]<<" ";
}
return 0;
}