Cod sursa(job #2554384)

Utilizator usureluflorianUsurelu Florian-Robert usureluflorian Data 22 februarie 2020 20:50:19
Problema Cerere Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.62 kb
#include <bits/stdc++.h>
using namespace std;
ifstream f ("cerere.in");
ofstream g ("cerere.out");
const int nmax=1e5+3;
vector <int> v[nmax];
int cat[nmax],rez[nmax],stv[nmax],st=1,n,x,y,usu[nmax];
void dfs(int nod)
{
	stv[++st]=nod;
	if(!cat[nod]) rez[nod]=0;
	else rez[nod]=rez[stv[st-cat[nod]]]+1;
	for(int i=0;i<v[nod].size();++i) dfs(v[nod][i]);
	--st;
}
int main()
{
	f>>n;
	for(int i=1;i<=n;++i) f>>cat[i];
	for(int i=1;i<n;++i)
    {
		f>>x>>y;
		v[x].push_back(y);
		++usu[y];
	}
	for(int i=1;i<=n;++i)
    {
        if(!usu[i]) dfs(i);
    }
	for(int i=1;i<=n;++i) g<<rez[i]<<' ';
	return 0;
}