Pagini recente » Cod sursa (job #2859870) | Cod sursa (job #1494628) | Cod sursa (job #1146995) | Cod sursa (job #176619) | Cod sursa (job #2836963)
#include <bits/stdc++.h>
using namespace std;
const int l_vec = 100001;
// ifstream fin("cod.in");
// ofstream fout("cod.out");
ifstream fin("cerere.in");
ofstream fout("cerere.out");
int gradm[l_vec];
int nr_noduri;
vector<vector<int>> graf;
vector<pair<int, int>> sol;
int visited[l_vec];
int dist[30];
void dfs(int nod, int d);
int main()
{
fin >> nr_noduri;
graf.resize(nr_noduri + 1);
for (int i = 1; i <= nr_noduri; i++)
fin >> gradm[i];
int p1, p2;
while (fin >> p1 && fin >> p2)
graf[p2].push_back(p1), graf[p1].push_back(p2);
dfs(1, 1);
sort(sol.begin(), sol.end());
for (auto x : sol)
fout << x.second << " ";
return 0;
}
void dfs(int nod, int d)
{
visited[nod] = 1;
dist[d] = nod;
for (auto next : graf[nod])
{
if (visited[next])
continue;
dfs(next, d + 1);
}
int nrm = 0;
int up = nod;
int dif = d;
while (gradm[up] != 0)
{
nrm++;
dif -= gradm[nod];
up = dist[dif];
}
sol.push_back(make_pair(nod, nrm));
}