Cod sursa(job #927704)

Utilizator superman_01Avramescu Cristian superman_01 Data 25 martie 2013 23:11:12
Problema Cerere Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.95 kb
#include<cstdio>
#include<fstream>
#include<vector>

#define NMAX 100005
/*
FILE *f=fopen("cerere.in","r");
FILE *g=fopen("cerere.out","w");
*/
using namespace std;
ifstream f("cerere.in");
ofstream g("cerere.out");
vector <int> arb[NMAX],C;

int v[NMAX],fat[NMAX],n,sol[NMAX];
int r;

void read( void )
{
    f>>n;
    for(int i(1); i <= n ; ++i )
f>>v[i];
 r=n*(n+1)/2;
    for(int i(1); i < n ; ++i )
    {
        int x,y;
f>>x>>y;
        fat[y]=x;
        r-=y;
        arb[x].push_back(y);
    }
    f.close();
}
void DFS(int node )
{
   C.push_back(node);
    if(v[node])
    {
        sol[node]=sol[C[ C.size()-1 - v[node] ]] +1;

    }
    for(int i(0); i <arb[node].size(); ++i )
        DFS(arb[node][i]);

  C.pop_back();
}
void write( void )
{
    for(int i(1); i <= n  ; ++i )
       g<<sol[i]<<" ";
       g.close();


}
int main ( void )
{
    read();
    DFS(r);
    write();
    return 0;
}