Cod sursa(job #2551463)

Utilizator stefan1anubystefan popa stefan1anuby Data 19 februarie 2020 20:57:41
Problema Cerere Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.95 kb
#include <fstream>
#include <vector>

using namespace std;
ifstream cin("cerere.in");
ofstream cout("cerere.out");
#define N 100005
vector < int > L[N];
int sol[N],st[N],str[N],par[N];
int n;
void Read()
{
    int i,x,y;
    cin>>n;
    for(i=1; i<=n; i++)
        cin>>str[i];
    for(i=1; i<n; i++)
    {
        cin>>x>>y;
        L[x].push_back(y);
    }
}
void Solve()
{
    int i,cnt=0,top,stramos;
    st[++cnt]=1;
    sol[1]=0;
    while(cnt!=0)
    {
        top=st[cnt];
        if(par[top]<L[top].size())
        {
            st[++cnt]=L[top][par[top]];
            par[top]++;
            top=st[cnt];
            stramos=st[cnt-str[st[cnt]]];
            if(str[top]==0) sol[top]=0;
            else sol[top]=sol[stramos]+1;
        }
        else
            cnt--;
        cout<<top<<endl;
    }
    for(i=1;i<=n;i++)
        cout<<sol[i]<<" ";
}
int main()
{
    Read();
    Solve();
    return 0;
}