Pagini recente » Cod sursa (job #281089) | Cod sursa (job #230090) | Borderou de evaluare (job #2116716) | Cod sursa (job #2023221) | Cod sursa (job #1245385)
#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;
}