Pagini recente » Cod sursa (job #327784) | Cod sursa (job #2882052) | Cod sursa (job #1627609) | Cod sursa (job #269862) | Cod sursa (job #268605)
Cod sursa(job #268605)
#include<fstream.h>
#define nmax 300000
ifstream f("cerere.in");
ofstream g("cerere.out");
struct lista
{
long inf;
lista *urm;
}*a[nmax];
long st[nmax],viz[nmax],n,c[nmax],x,y,s[nmax],nr;
void citire()
{
long i;
f>>n;
for(i=1;i<=n;i++)
f>>c[i];
for(i=1;i<=n;i++)
{
f>>x>>y;
lista *q=new lista;
q->inf=y;
q->urm=a[x];
a[x]=q;
}
}
long sol(long i,long nr)
{
if(c[st[i]]!=0)
{
nr++;
sol(i-c[st[i]],nr);
}
else
return nr;
}
void solutie(long vf,long i)
{
st[i]=vf;
s[vf]=sol(i,0);
viz[vf]=1;
lista *q=a[vf];
while(q)
{
if(viz[q->inf]==0)
solutie(q->inf,i+1);
q=q->urm;
}
}
int main()
{
citire();
long i;
for(i=1;i<=n;i++)
if(viz[i]==0)
solutie(i,1);
for(i=1;i<=n;i++)
g<<s[i]<<" ";
f.close();
g.close();
return 0;
}