Cod sursa(job #2070231)

Utilizator geralt_of_riviajohn nathalis geralt_of_rivia Data 19 noiembrie 2017 12:53:58
Problema Cerere Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.88 kb
#include <fstream>
#include<vector>
using namespace std;
ifstream cin ("cerere.in");
ofstream cout ("cerere.out");
int n,p[100100],l[100100],st[100100],vf;
vector <int> arb[100100];
int sol[100100];
void read ()
{ int x,y;
    cin>>n;
    for(int i=1;i<=n;i++) cin>>p[i];
    for(int i=1;i<n;i++)
    {
        cin>>x>>y;
        arb[x].push_back(y);
        l[x]++;
    }
}
void df ()
{
    vf=1;
    st[1]=1;
    while(vf)
    {
        int nod=st[vf];
        if(l[nod]==0) vf--;
        else
        {
            l[nod]--;
            st[++vf]=arb[nod][l[nod]];
            sol[st[vf]]=sol[st[vf-p[st[vf]]]]+1;
            if(p[st[vf]]==0) sol[st[vf]]=0;
        }
    }
}
void write ()
{
    for(int i=1;i<=n;i++)
        cout<<sol[i]<<" ";
}
int main()
{
    read();
    df();
    write();
    cin.close();
    cout.close();
    return 0;
}