Cod sursa(job #2116220)

Utilizator GabiTulbaGabi Tulba-Lecu GabiTulba Data 27 ianuarie 2018 13:36:33
Problema Cerere Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.88 kb
#include <bits/stdc++.h>

#define INF 2140000000
#define MOD 1000000007
#define MaxN 100005

using namespace std;

FILE*IN=fopen("cerere.in","r"),*OUT=fopen("cerere.out","w");

int f[MaxN],Root,N,anc[MaxN],X,Y,d[MaxN],Size,Stack[MaxN];
vector <int> Graph[MaxN];
void DFS(int node)
{
    Stack[++Size]=node;
    if(anc[node]!=0)
        d[node]=1+d[Stack[Size-anc[node]]];
    for(int i=0;i<Graph[node].size();i++)
        DFS(Graph[node][i]);
    Size--;
}
int main()
{
    fscanf(IN,"%d",&N);
    for(int i=1;i<=N;i++)
        fscanf(IN,"%d",&anc[i]);
    for(int i=1;i<N;i++)
    {
        fscanf(IN,"%d%d",&X,&Y);
        f[Y]=X;
        Graph[X].push_back(Y);
    }
    for(int i=1;i<=N;i++)
        if(!f[i])
        {
            Root=i;
            break;
        }
    DFS(Root);
    for(int i=1;i<=N;i++)
        fprintf(OUT,"%d ",d[i]);
    return 0;
}