Cod sursa(job #2287243)

Utilizator ilie0712Botosan Ilie ilie0712 Data 21 noiembrie 2018 18:03:47
Problema Cerere Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.45 kb
#include <fstream>
#include <iostream>
#include <algorithm>
#include <vector>

using namespace std;

ifstream in("cerere.in");
ofstream out("cerere.out");

const int N=100003;

vector <int> a[N];

int n,contor,v[N],frecv[N];
bool viz[N];

void citire()
{
    int x,y;
    in>>n;
    for(int i=1; i<=n; ++i) in>>v[i];
    for(int i=1; i<n; ++i)
    {
        in>>x>>y;
        a[x].push_back(y);
        a[y].push_back(x);
    }
    in.close();
}

void dfs(int x)
{
    viz[x]=true;
    for(auto y: a[x])
    {
        if(!viz[y])
        {
            dfs(y);
            if(v[y]>0)
            {
                contor=0;
                int aux=y;
                int aux2=y;
                while(v[aux]>0 || contor!=v[aux])
                {
                    int ok=0;
                    for(auto i: a[aux2])
                        if(i<aux2)
                        {
                            ++contor;
                            aux2=i;
                            break;
                        }
                    if(contor==v[aux])
                    {
                        ++frecv[y];
                        contor=0;
                        ok=1;
                    }
                    if(ok==1)
                    aux=aux2;
                }
            }
        }
    }
}
int main()
{
    citire();
    dfs(1);
    for(int i=1; i<=n; ++i) out<<frecv[i]<<" ";
    return 0;
}