Cod sursa(job #2144158)

Utilizator dianamichesaRosu Diana Michesa dianamichesa Data 26 februarie 2018 16:11:47
Problema Cerere Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.89 kb
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
ifstream f("cerere.in");
ofstream g("cerere.out");
const int N=100001;
int n,k[N],rez[N];
int v[N];
/*void dfs(int x)
{
    viz[x]=1;
    nr[x]=1;
    for(int i=0; i<v[x].size(); i++)
    {
        int y=v[x][i];
        if(!viz[y])
        {
            dfs(y);
            nr[x]+=nr[y];
            scor[x]=max(scor[x],nr[y]);
        }
    }
    scor[x]=max(scor[x],n-nr[x]);
}*/
int fct(int x)
{
    if(k[x]==0)
       return 0;
    if(rez[x]!=0)
       return rez[x];
    int y=x;
    for(int i=1;i<=k[x];i++)
       y=v[y];
    return 1+fct(y);
}
int main()
{
    f>>n;
    for(int i=1; i<=n; i++)
    {
        f>>k[i];
    }
    for(int i=1;i<n;i++){
        int x,y;
        f>>x>>y;
        v[y]=x;
    }
    for(int i=1;i<=n;i++)
        rez[i]=fct(i);
    for(int i=1;i<=n;i++)
        g<<rez[i]<<' ';
    return 0;
}