Cod sursa(job #1902223)

Utilizator nartorrewrew narto Data 4 martie 2017 14:22:58
Problema Cerere Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.24 kb
#include <fstream>
#include <vector>
#define nmax 100000

using namespace std;

ifstream f("cerere.in");
ofstream g("cerere.out");

int n, niv[nmax],viz[nmax], m, sol[nmax], k[nmax], l, sap;
vector<int>v[nmax];

void dfs(int x)
{ int i;
    viz[x]=1;
    for(i=0;i<v[x].size();i++)
      if(viz[v[x][i]]!=1)
    {
        viz[v[x][i]]=1;
        niv[v[x][i]]=niv[x]+1;
        dfs(v[x][i]);
    }
}
void dfs1(int x)
{ int i;

    viz[x]=1;
    if(niv[x]==sap && k[x]==0)
      {fill(viz+1,viz+nmax,1);
        l++;}
    else if(niv[x]==sap && k[x]!=0)
     { sap=sap-k[sap];
       l++;
     }
    for(i=0;i<v[x].size();i++)
      if(viz[v[x][i]]!=1)
    {
        viz[v[x][i]]=1;
        dfs1(v[x][i]);
    }


}

int main()
{
 int x, y, i, j, ok;
    f>>n;
    for(i=1;i<=n;i++)
        f>>k[i];
    for(i=1;i<n;i++)
    { f>>x>>y;
      v[x].push_back(y);
      v[y].push_back(x);
    }
    niv[1]=1;
    dfs(1);
    fill(viz+1,viz+nmax+1,0);
    for(i=1;i<=n;i++)
    {
        if(k[i]==0)
            sol[i]==0;
        else
        { l=0;
         sap=niv[i]-k[i];
       dfs1(i);
        fill(viz+1,viz+nmax+1,0);
         sol[i]=l;
        }
    }
  for(i=1;i<=n;i++)
    g<<sol[i]<<' ';
}