Pagini recente » Cod sursa (job #1013610) | Cod sursa (job #3220572) | Cod sursa (job #2927065) | Cod sursa (job #1348576) | Cod sursa (job #632088)
Cod sursa(job #632088)
/*#include <fstream>
#include <vector>
#include <cstring>
using namespace std;
int v[100001], n;
int p[100001], stiva[100001], depth = 1;
vector<int> a[100001];
void bfs(int poz)
{
int i;
if(v[poz] == 0)
p[poz] = 0;
else
p[poz] = p[stiva[depth - v[poz]]] + 1;
stiva[depth] = poz;
++depth;
for(i = 0; i < a[poz].size(); ++i)
bfs(a[poz][i]);
--depth;
}
int main()
{
int i, x, y, root;
ifstream f("cerere.in");
ofstream g("cerere.out");
f >> n;
root = n * (n + 1) / 2;
for(i = 1; i <= n; ++i)
f >> v[i];
for(i = 1; i < n; ++i)
{
f >> x >> y;
a[x].push_back(y);
root -= y;
}
bfs(root);
for(i = 1; i <= n; ++i)
g << p[i] << ' ';
g.close();
return 0;
}
*/
#include <cstdio>
#include <vector>
using namespace std;
int cnt,d[100001],v[100001],q[100001];
vector <int> g[100001];
void dfs(int x)
{
vector <int>::iterator i;
++cnt;
q[cnt]=x;
if (v[x])
d[x]=d[q[cnt-v[x]]]+1;
else
d[x]=0;
for (i=g[x].begin();i!=g[x].end();++i)
dfs(*i);
q[cnt]=0;
--cnt;
}
int main()
{
int n,i,x,y,root;
freopen("cerere.in","r",stdin);
freopen("cerere.out","w",stdout);
scanf("%d\n",&n);
root=n*(n+1)/2;
for (i=1;i<=n;++i)
scanf("%d ",&v[i]);
for (i=1;i<n;++i)
{
scanf("%d %d\n",&x,&y);
g[x].push_back(y);
root-=y;
}
dfs(root);
for (i=1;i<=n;++i)
printf("%d ",d[i]);
printf("\n");
return 0;
}