Cod sursa(job #1676946)

Utilizator ionut98Bejenariu Ionut Daniel ionut98 Data 6 aprilie 2016 11:29:37
Problema Cerere Scor 100
Compilator cpp Status done
Runda Teme Pregatire ACM Unibuc 2013 Marime 0.75 kb
#include<fstream>
#include<vector>
using namespace std;
ifstream f("cerere.in");
ofstream g("cerere.out");
int d[100005],s[100005],k[100005],t[100005],n;
vector<int>l[100005];
int x,y;
void dfs(int nod,int niv)
{
    s[niv]=nod;
    if(k[nod]==0)
      d[nod]=0;
    else
      d[nod]=1+d[s[niv-k[nod]]];
    for(int i=0;i<l[nod].size();i++)
      dfs(l[nod][i],niv+1);
    return ;
}
int main()
{
    f>>n;
    for(int i=1;i<=n;i++)
      f>>k[i];
    for(int i=1;i<=n;i++)
    {
        f>>x>>y;
        l[x].push_back(y);
        t[y]=x;
    }
    for(int i=1;i<=n;i++)
    {
        if(t[i]==0)
        {
            dfs(i,1);
            break;
        }
    }
    for(int i=1;i<=n;i++)
      g<<d[i]<<" ";
    return 0;
}