Cod sursa(job #1452137)

Utilizator stropitoare98stropitoare stropitoare98 Data 19 iunie 2015 23:04:03
Problema Cerere Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.91 kb
#include <fstream>
#include <vector>
#define dim 100001
using namespace std;
ifstream fin("cerere.in");
ofstream fout("cerere.out");
bool viz[dim],Grade[dim];
int lvl[dim],sol[dim],K[dim],n,i,a,b,root;
vector <int> G[dim];
void dfs(int node,int level)
{
    viz[node]=1;
    if(K[node]==0)
        lvl[level]=0;
    else
        lvl[level]=lvl[level-K[node]]+1;
    sol[node]=lvl[level];
    for(vector<int> :: iterator it=G[node].begin();it!=G[node].end();it++)
    {
        if(viz[*it]==0)
            dfs(*it,level+1);
    }
}
int main()
{
    fin>>n;
    for(i=1;i<=n;i++)
        fin>>K[i];
    for(i=1;i<n;i++)
    {
        fin>>a>>b;
        G[a].push_back(b);
        Grade[b]=1;
    }
    for(i=1;i<=n;i++)
        if(Grade[i]==0)
        {
            root=i;
            break;
        }
    dfs(root,1);
    for(i=1;i<=n;i++)
        fout<<sol[i]<<" ";
    return 0;
}