Cod sursa(job #2283893)

Utilizator AndreiDeltaBalanici Andrei Daniel AndreiDelta Data 15 noiembrie 2018 23:32:40
Problema Cerere Scor 60
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.85 kb
#include <bits/stdc++.h>
#define Dim 100006
using namespace std;
ifstream f("cerere.in");
ofstream g("cerere.out");
vector < int > Vf[Dim];
int N,a,b,G[Dim],Grad[Dim],Dist[Dim],Ord[Dim];
int rad;
bool viz[Dim];


void DFS(int nod,int nr)
{

    viz[nod]=1;
    int po;
   if(Dist[nod])
        G[nod]=G[Ord[nr-Dist[nod]]]+1;

   for(po=0;po<Vf[nod].size();po++)
     if(!viz[Vf[nod][po]])
   {
      Ord[nr]=nod;
      DFS(Vf[nod][po],nr+1);
   }
}

int main()
{
    f>>N;
    for(int i=1;i<=N;i++) f>>Dist[i];
    for(int i=1;i<=N;i++)
    {
        f>>a>>b;
        Grad[b]+=1;
        Vf[a].push_back(b);
    }
    bool stop=0;
    for(int i=1;i<=N&&stop==0;i++)
        if(Grad[i]==0)
    {
        stop=1;
        rad=i;
    }
    G[rad]=0;
    DFS(rad,1);
    for(int i=1;i<=N;i++) g<<G[i]<<" ";
    return 0;
}