Cod sursa(job #1794015)

Utilizator eu3neuomManghiuc Teodor-Florin eu3neuom Data 31 octombrie 2016 20:02:35
Problema Cerere Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.96 kb
#include <bits/stdc++.h>

using namespace std;

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

const int NMax = 100005;

int v[NMax];
int D[17][NMax];

int main() {

    ios::sync_with_stdio();
    fin.tie(NULL);

    int n;
    fin >> n;

    for(int i = 1; i <= n; i++) fin >> v[i];

    for(int i = 1; i < n; i++) {
        int a, b;
        fin >> a >> b;

        D[0][b] = a;
    }

    for(int i = 1; i <= 17; i++) {
        for(int j = 1; j <= n; j++) {
            D[i][j] = D[i - 1][D[i - 1][j]];
        }
    }

    for(int i = 1; i <= n; i++) {
        int node = i;
        int newNode;
        int k = 0;

        while(v[node] != 0) {
            k++;

            for(int j = 0; j <= 17; j++) {
                if((v[node] >> j) % 2 == 1) {
                    newNode = D[j][node];
                }
            }
            node = newNode;
        }

        fout << k << " ";

    }

    return 0;
}