Pagini recente » Cod sursa (job #2221520) | Cod sursa (job #533056) | Cod sursa (job #1647530) | Cod sursa (job #918077) | Cod sursa (job #1073192)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
ifstream fin("cerere.in");
ofstream fout("cerere.out");
#define MAX 100100
vector < int > G[MAX];
int tata[MAX], stiva[MAX], sf, a[MAX];
int* x;
void df1(int nod)
{
stiva[++sf]=nod;
a[nod]=stiva[sf-a[nod]];
for(int i=0;i<G[nod].size();i++)
{
df1(G[nod][i]);
}
sf--;
}
int up(int nod)
{
if(!x[nod])
{
x[nod]=up(a[nod])+1;
}
return x[nod];
}
int main()
{
sf=-1;
int n, i;
fin>>n;
for(i=1;i<=n;i++)
{
fin>>a[i];
}
for(i=1;i<n;i++)
{
int df, fg;
fin>>df>>fg;
G[df].push_back(fg);
tata[fg]=df;
}
int e=1;
while(tata[e])
e=tata[e];
df1(e);
x=tata;
for(i=1;i<=n;i++)
{
if(a[i]==i)
{
x[i]=1;
}
else
{
x[i]=0;
}
}
for(i=1;i<=n;i++)
{
if(!x[i])
{
x[i]=up(i);
}
}
for(i=1;i<=n;i++)
{
fout<<x[i]-1<<" ";
}
}