Cod sursa(job #1888699)

Utilizator marcdariaDaria Marc marcdaria Data 22 februarie 2017 11:58:30
Problema Cerere Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.83 kb
#include <fstream>
#include <vector>

using namespace std;

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

const int MaxN=100005;
int N, top;
vector<int> G[MaxN], iq(MaxN), st(MaxN), g(MaxN);
bool has_daddy[MaxN];

void Read();
void DFS(int x);

int main()
{
    Read();
    int i;
    for(i=1;has_daddy[i] && i<=N;++i);
        DFS(i);

    for(int i=1;i<=N;++i)
        fout<<g[i]<<' ';

    fout.close();
    return 0;
}

void Read()
{
    fin>>N;
    for(int i=1;i<=N;++i)
        fin>>iq[i];
    for(int i=1;i<=N;++i)
    {
        int x,y;
        fin>>x>>y;
        has_daddy[y]=true;
        G[x].push_back(y);
    }
    fin.close();
}
void DFS(int x)
{
    st[++top]=x;
    if(iq[x])
        g[x]=g[st[top-iq[x]]]+1;

    for(const int y : G[x])
        DFS(y);
    --top;
}