Cod sursa(job #1257288)

Utilizator romircea2010FMI Trifan Mircea Mihai romircea2010 Data 7 noiembrie 2014 16:06:07
Problema Cerere Scor 100
Compilator cpp Status done
Runda Teme Pregatire ACM Unibuc 2013 Marime 0.97 kb
#include <fstream>
#include <vector>

using namespace std;

const int NMax = 100010;
int N;
int st[NMax], vf, up[NMax], ans[NMax];
vector <int> G[NMax];
int rad = 0;

void Read()
{
    ifstream f ("cerere.in");
    f >> N;
    for (int i = 1; i <= N; ++ i)
    {
        f >> up[i];
        rad = rad ^ i;
    }
    for (int i = 1; i < N; ++ i)
    {
        int x, y; f >> x >> y;
        G[x].push_back(y);
        rad = rad ^ y;
    }
    f.close();
}

inline void DFS(const int node)
{
    st[++vf] = node;
    if (up[node] == 0)
        ans[node] = 0;
    else
        ans[node] = ans[st[vf - up[node]]] + 1;
    for (vector <int> :: iterator it = G[node].begin(); it != G[node].end(); ++ it)
        DFS(*it);
    --vf;
}

void Write()
{
    ofstream g ("cerere.out");
    for (int i = 1; i <= N; ++ i)
        g << ans[i] << " ";
    g << "\n";
    g.close();
}


int main()
{
    Read();
    DFS(rad);
    Write();
    return 0;
}