Pagini recente » Cod sursa (job #559415) | Cod sursa (job #452096) | Cod sursa (job #662339) | Cod sursa (job #2263549) | Cod sursa (job #507406)
Cod sursa(job #507406)
//problema cerere ->infoarena-> de pct metoda DSF -> stiva implementata manual
#include<stdio.h>
#include<stdlib.h> //pt realloc
#include<string.h> //pt memset
#define dim 100005
using namespace std;
int * A[dim],viz[dim],n,i,stiva[dim],v[dim],x,y,r,sol[dim];
void dfs(int x,int k)
{
int i;
viz[x]=1;
stiva[k]=x;
if(v[x]==0)
sol[x]=0;
else sol[x]=sol[ stiva[k-v[x]] ]+1;
for(i=1;i<=A[x][0];i++)
if(!viz[ A[x][i] ])
{ dfs(A[x][i],k+1 );
stiva[k+1]=0;
}
}
int main()
{
FILE *f=fopen("cerere.in","r"), *g=fopen("cerere.out","w");
fscanf(f,"%d",&n);
for(i=1;i<=n;i++)
fscanf(f,"%d",&v[i]);
for(i=1;i<=n;i++)
{
A[i]=(int *)realloc(A[i],sizeof(int));
A[i][0]=0;
}
for(i=1;i<n;i++)
{
fscanf(f,"%d %d",&x,&y);
viz[y]=1;
A[x][0]++;
A[x]=(int *)realloc(A[x], (A[x][0]+1)*sizeof(int));
A[x][A[x][0]]=y;
}
for(i=1;i<=n;i++)
if(viz[i]==0)
{r=i;break;}
memset(viz,0,sizeof(viz));
dfs(r,1);
for(i=1;i<=n;i++)
fprintf(g,"%d ",sol[i]);
fprintf(g,"\n");
fclose(f);
fclose(g);
return 0;
}