Cod sursa(job #2007196)

Utilizator refugiatBoni Daniel Stefan refugiat Data 2 august 2017 10:50:58
Problema Cerere Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.72 kb
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
ifstream si("cerere.in");
ofstream so("cerere.out");
int k[100005];
int t[100005];
int cont[100005];
void dfs(int m)
{
    if(cont[m]!=-1)
        return;
    int tata=m;
    for(int i=1;i<=k[m];++i)
    {
        tata=t[tata];
    }
    dfs(tata);
    cont[m]=cont[tata]+1;
}
int main()
{
    int n;
    si>>n;
    for(int i=1;i<=n;++i)
    {
        si>>k[i];
        cont[i]=-1;
        if(k[i]==0)
            cont[i]=0;
    }
    int a,b;
    for(int i=1;i<=n;++i)
    {
        si>>a>>b;
        t[b]=a;
    }
    for(int i=1;i<=n;++i)
    {
        dfs(i);
        so<<cont[i]<<' ';
    }
    return 0;
}