Cod sursa(job #2519218)

Utilizator david.teacaDavid Stefan Teaca david.teaca Data 7 ianuarie 2020 14:23:35
Problema Cerere Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.94 kb
	
#include <bits/stdc++.h>
 
using namespace std;
 
ifstream in("cerere.in");
ofstream out("cerere.out");
 
int n;
int vf[100001],urm[100001],last[100001],nr;
bitset <100001> noRad;
 
int toSend[100001];
int nrM[100001];
int stram[100001];
 
void adauga(int nod,int vec)
{
    vf[++nr]=vec;
    urm[nr]=last[nod];
    last[nod]=nr;
}
 
void dfs(int nod,int dist=0)
{
    if(toSend[nod]==0)
        nrM[nod]=0;
    else
        nrM[nod]=nrM[ stram[dist-toSend[nod]+1] ]+1;
 
    stram[dist+1]=nod;
 
    for(int k=last[nod];k;k=urm[k])
        dfs(vf[k],dist+1);
}
 
int main()
{
    in>>n;
 
    for(int i=1;i<=n;i++)
        in>>toSend[i];
 
    for(int i,j,k=1;k<=n-1;k++)
    {
        in>>i>>j;
 
        adauga(i,j);
        noRad[j]=1;
    }
 
    int start=1;
    while(noRad[start]==1)
        start++;
 
    dfs(start);
 
    for(int i=1;i<=n;i++)
        out<<nrM[i]<<' ';
 
    return 0;
}