Cod sursa(job #1344522)

Utilizator Darius15Darius Pop Darius15 Data 16 februarie 2015 19:44:36
Problema Cerere Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.01 kb
#include <fstream>
#include <vector>
#include <bitset>
using namespace std;
ifstream f("cerere.in");
ofstream g("cerere.out");
vector <int> v[100001];
bitset <1000001> viz,fo;
int sol[100001],st[100001],l,vec[100001],n,i,x,y;
void dfs(int i)
{
    int j;
    for (j=0;j<v[i].size();j++)
        if (fo[v[i][j]]==false)
        {
            fo[v[i][j]]=true;
            st[++l]=v[i][j];
            if (vec[v[i][j]]==0)
                sol[v[i][j]]=0;
            else
                sol[v[i][j]]=sol[st[l-vec[v[i][j]]]]+1;
            dfs(v[i][j]);
            l--;
        }
}
int main()
{
    f>>n;
    for (i=1;i<=n;i++)
        f>>vec[i];
        for (i=1;i<=n-1;i++)
        {
            f>>x>>y;
            viz[y]=true;
            v[x].push_back(y);
        }
    for (i=1;i<=n;i++)
        if (viz[i]==false)
    {
        sol[i]=0;
        st[1]=i;
        fo[i]=true;
        l=1;
        dfs(i);
    }
    for (i=1;i<=n;i++)
        g<<sol[i]<<' ';
    return 0;
}