Cod sursa(job #1245385)

Utilizator cioionutFMI Ionut Ciocoiu cioionut Data 19 octombrie 2014 01:51:43
Problema Cerere Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.92 kb
#include<iostream>
#include<fstream>
#include<vector>
#include<queue>
#include<stack>

std::vector <int> v[100010];
std::vector <int> viz(100010, 0);
std::vector <int> niv(0);
std::vector <int> sol(100010, 0);

void dfs(int top,int *a)
{
	viz[top] = 1;
	niv.push_back(top);
	if (a[top] != 0)
	sol[top] = sol[niv[niv.size()-1 - a[top]]] +1;
	std::cout << top << " " << niv.size()-1 << "\n";
	for (int i = 0; i < v[top].size();i++)
	if (viz[v[top][i]] == 0) 
		dfs(v[top][i],a);
	niv.pop_back();
	//std::cout <<top<<" "<< niv.size() << "\n";
}
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]; 
	}
	while (!f.eof()) {
		f >> i >> j;
		v[i].push_back(j);
	}
	
	dfs(1,a);
	
	for (int i = 1; i <= n; i++)
		g << sol[i] << " ";
	
	//cin.get();
	f.close();
	g.close();
	return 0;
}