Pagini recente » Cod sursa (job #665662) | Cod sursa (job #2939575) | Cod sursa (job #831103) | Cod sursa (job #1989559) | Cod sursa (job #508274)
Cod sursa(job #508274)
#include<stdio.h>
#include<vector>
#define nmax 100001
using namespace std;
FILE *f=fopen("cerere.in","r");
FILE *g=fopen("cerere.out","w");
int d[nmax],t[nmax],x,y,ns,stramos[nmax],level,sol[nmax],ok[nmax],N;
vector <int> a[nmax];
void df(int nod){
stramos[++level]=nod,sol[nod]=sol[stramos[level-d[nod]]]+1,ok[nod]=1;
for(int i=0;i<a[nod].size();i++)
if(!ok[a[nod][i]])
df(a[nod][i]);
--level;
}
int main(){
//citire
fscanf(f,"%d",&N);
for(int i=1;i<=N;i++)
fscanf(f,"%d",&x),d[i]=x;
for(int i=1;i<=N;i++)
fscanf(f,"%d%d",&x,&y),a[x].push_back(y),t[y]=x;
//cautam nodul sursa
for(ns=1;ns<=N;ns++)
if(!t[ns])
break;
//df din nodul sursa
df(ns);
for(int i=1;i<=N;i++)
fprintf(g,"%d ",sol[i]-1);
return 0;
}