Pagini recente » Cod sursa (job #2505095) | Cod sursa (job #2634473) | Cod sursa (job #2630742) | Cod sursa (job #1017408) | Cod sursa (job #1446433)
#include <fstream>
#include <unordered_set>
#include <vector>
using namespace std;
void citeste_date(vector<vector<int> >& copii, vector<int>& k, int& radacina){
ifstream f("cerere.in");
int n = 0;
f >> n;
copii.resize(n);
k.resize(n);
for(auto& x : k){
f >> x; }
unordered_set<int> nevazute;
for(int i = 0; i < n; ++i){
nevazute.insert(i); }
for(int i = 1, a, b; i < n; ++i){
f >> a >> b;
--a, --b;
copii[a].push_back(b);
nevazute.erase(b); }
radacina = *begin(nevazute); }
void dfs(const vector<vector<int> >& copii, const vector<int>& k,
vector<int>& rez, vector<int>& st){
rez[st.back()] = rez[st[st.size() - k[st.back()]-1]]+1;
for(const auto next : copii[st.back()]){
st.push_back(next);
dfs(copii, k, rez, st);
st.pop_back(); } }
int main(){
vector<vector<int> > copii;
vector<int> k, rez, st(1);
citeste_date(copii, k, st[0]);
rez.resize(k.size(), -1);
dfs(copii, k, rez, st);
ofstream g("cerere.out");
for(const auto x : rez){
g << x << ' '; }
return 0; }