Cod sursa(job #1035995)

Utilizator Catalina_BrinzaBrinza Catalina Catalina_Brinza Data 18 noiembrie 2013 22:06:32
Problema Cerere Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.92 kb
//
//  main.cpp
//  cerere
//
//  Created by Catalina Brinza on 11/18/13.
//  Copyright (c) 2013 Catalina Brinza. All rights reserved.
//

#include <iostream>
#include <fstream>
#include <vector>

using namespace std;
ifstream f("cerere.in");
ofstream g("cerere.out");
    vector <int> v[100001];
int cer[100001];
int a[100001];
int n;

void df(int x,int tata,int buni)
{
    if (a[x]==0) cer[x]=0;
    else if (a[x]==1) cer[x]=1+cer[tata];
    else cer[x]=1+cer[buni];
    
    
    int i=0;
    while (v[x].size()!=0 && i!=v[x].size())
    {df(v[x][i],x,tata); i++;}
    
    
}


int main()
{int i,y,x;
    bool rad[10001];
    f>>n;
    for (i=1;i<=n;i++)
    { f>>a[i]; rad[i]=false;}
    
    for (i=0;i<n-1;i++)
    {
        f>>x>>y;
        rad[y]=true;
        v[x].push_back(y);
    }
    for(i=1;i<=n;i++)
        if (rad[i]==0) break;
    int root=i;

    df(root,0,0);
    for (i=1;i<=n;i++) g<<cer[i]<<' ';
    return 0;
}