Pagini recente » Cod sursa (job #2195041) | Cod sursa (job #216263) | Cod sursa (job #898928) | Cod sursa (job #1966450) | Cod sursa (job #1061723)
#include <fstream>
#include <vector>
#define Nmax 100005
using namespace std;
int N,t[Nmax],st[Nmax],top,tata,v[Nmax];
vector <int> L[Nmax];
bool fr[Nmax];
inline void Read()
{
int x,y,i;
ifstream fin("cerere.in");
fin>>N;
for(i=1;i<=N;++i)
fin>>t[i];
for(i=1;i<N;++i)
{
fin>>x>>y;
fr[y]=true;
L[x].push_back(y);
}
for(i=1;i<=N;++i)
if(!fr[i])
tata=i;
fin.close();
}
inline void Dfs(int start)
{
int i,len;
st[++top]=start;
v[start]=st[top-t[start]]; len=L[start].size();
for(i=0;i<len;++i)
Dfs(L[start][i]);
--top;
}
inline int Ciclu(int i)
{
int sol=0;
while(v[i]!=i)
{
++sol;
i=v[i];
}
return sol;
}
inline void Solve()
{
int i;
ofstream fout("cerere.out");
for(i=1;i<=N;++i)
fout<<Ciclu(i)<<" ";
fout<<"\n";
fout.close();
}
int main()
{
Read();
Dfs(tata);
Solve();
return 0;
}