Cod sursa(job #3156081)

Utilizator BlaugranasEnal Gemaledin Blaugranas Data 10 octombrie 2023 16:03:58
Problema Cerere Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.91 kb
#include<bits/stdc++.h>
using namespace std;
ifstream f("cerere.in");
ofstream g("cerere.out");
#define M 100005
#define L 16384
#define X ((++o==L)?f.read(B,L),o=0:0)
vector<int> G[M];
int N,d[M],s[M],D[M],S[M],t,o,i,a,b,k;
char B[L],p[L+7];
inline void R(int &x)
{
    for(x=0;!isdigit(B[o]);X);
    for(;isdigit(B[o]);X)
        x=x*10+B[o]-'0';
}
inline void T(int x)
{
    int i,d=x>9999?5:x>999?4:x>99?3:x>9?2:1;
    for(i=d-1;i>=0;x/=10,--i)
        p[k+i]=x%10+48;
    p[k+d]=32,k+=d+1;
    if(k>=L)
        g.write(p,k),k=0;
}
inline void F(int k)
{
    S[++t]=k;
    if(s[k])
        D[k]=D[S[t-s[k]]]+1;
    for(auto j:G[k])
        F(j);
    --t;
}
int main()
{
    for(R(N),i=1;i<=N;++i)
        R(s[i]);
    for(i=1;i<N;++i)
        R(a),R(b),G[a].push_back(b),d[b]=a;
    for(i=1;d[i];++i);
    for(F(i),i=1;i<=N;++i)
        T(D[i]);
    g.write(p,k);
    return 0;
}