Cod sursa(job #1245391)

Utilizator cioionutFMI Ionut Ciocoiu cioionut Data 19 octombrie 2014 03:57:18
Problema Cerere Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.22 kb
#include<iostream>
#include<fstream>
#include<vector>
using namespace std;
std::vector <int> v[100001];
std::vector <int> viz(100010, 0);
std::vector <int> sol(100010, 0);
std::vector <int> stramos(100010, 0);


void dfs(int top,int *a,int n)
{
	viz[top] = 1; 
	//std::cout << top << " " << n <<" " << stramos[top]<<" "<<sol[stramos[top]]<<'\n';
	
	if(n>=a[top]&&a[top]!=0) sol[top] = sol[stramos[top]] + 1;
	for (int i = 0; i < v[top].size();i++)
	if (viz[v[top][i]] == 0) dfs(v[top][i],a,n+1);
	n--;
	//std::cout << top << " " << stramos[top];
}
using namespace std;
int main()
{
	ifstream f("cerere.in");
	ofstream g("cerere.out");
	int n,i,j;
	f >> n;
	int *a = new int[n + 1];
	for (i = 1; i <= n; i++) {
		f >> a[i]; 
	}
	vector <int> t(100010, 0);
	while (!f.eof()) {
		f >> i >> j;
		t[j] = i;
		v[i].push_back(j);
	}

	/*for (i = 1; i <= n; i++) cout << t[i] << " ";
	cout << '\n';*/
	for (i = 1; i <= n; i++)
	{
		if(t[i]!=0) stramos[i] = i;
		for (j = 1; j <= a[i]; j++) stramos[i] = t[stramos[i]];
	}
	//for (i = 1; i <= n; i++) cout << stramos[i] << " ";cout << '\n';
	dfs(1,a,0);
	
	for (i = 1; i <= n; i++) g << sol[i] << " ";
	
	//cin.get();
	f.close();
	g.close();
	return 0;
}