Cod sursa(job #1652628)

Utilizator VladTiberiuMihailescu Vlad Tiberiu VladTiberiu Data 15 martie 2016 10:45:36
Problema Cerere Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.08 kb
#include <fstream>
#include <cstdio>
#include <vector>
#include <queue>
#include <set>
#include <stack>
#include <cmath>
#include <algorithm>
#include <iomanip>
#include <cstring>

#define NMax 100005
using namespace std;
ifstream f("cerere.in");
ofstream g("cerere.out");

int n,x,y;
int d[NMax];
int a[17][NMax];

int main()
{
    f >> n;
    for(int i = 1; i <= n; ++i)
        f >> d[i];
    for(int i = 1; i < n; ++i){
        f >> x >> y;
        a[0][y] = x;
    }

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

    for(int i = 1; i <= n; ++i){
        int index = i,prev = d[i];
        int ok = 1;
        int s = 0;
        while(ok){
            if(d[index] == 0)
                break;
            s += 1;
            prev = d[index];
            for(int j = 0; (1<<j) <= n; ++j){
                if((1<<j) & prev){
                    index = a[j][index];
                }
            }
        }
        g << s << " ";
    }

    return 0;
}