Cod sursa(job #1163558)

Utilizator tanduraDomnita Dan tandura Data 1 aprilie 2014 14:27:28
Problema Cerere Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.23 kb
#include <fstream>
#include <vector>
using namespace std;

typedef struct Nod
{
    int x;
    Nod *a;
} *pNod;

int n,r;

pNod v[100001];
int str[100001],rez[100001];
bool marc[100001];
vector<int> s;

void add(pNod &destinatie,int valoare)
{
    pNod p;
    p = new Nod;
    p->x = valoare;
    p->a = destinatie;
    destinatie = p;
}

void citire()
{
    int a,b;

    ifstream f("cerere.in");
    f>>n;
    for(int i=1;i<=n;i++)
        f>>str[i];
    for(int i=1;i<n;i++)
    {
        f>>a>>b;
        marc[b]=true;
        add(v[a],b);
    }
    f.close();
}

int radacuna()
{
    int i=0;
    for(i=1;i<=n;i++)
        if(marc[i]==false)
            break;
    return i;
}

void df(int nod)
{
    for(pNod p=v[nod];p!=NULL;p=p->a)
    {
        if(str[p->x]==0)
            rez[p->x]=0;
        else
            rez[p->x]=rez[s[s.size()-str[p->x]]]+1;
        s.push_back(p->x);
        df(p->x);
        s.pop_back();
    }
}

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

int main()
{
    citire();
    r=radacuna();
    s.push_back(r);
    df(r);
    afisare();
    return 0;
}