Pagini recente » Cod sursa (job #524157) | Cod sursa (job #1237950) | Cod sursa (job #2592524) | Cod sursa (job #2286921) | Cod sursa (job #1446455)
#include <fstream>
#include <vector>
using namespace std;
int suma_xor_pana_la(const int n){
switch(n%4){
case 0:
return n+1;
case 1:
return 1;
case 2:
return n;
case 3:
return 0; } }
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; }
radacina = suma_xor_pana_la(n-1);
for(int i = 1, a, b; i < n; ++i){
f >> a >> b;
--a, --b;
radacina ^= b;
copii[a].push_back(b); } }
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(), 0);
dfs(copii, k, rez, st);
ofstream g("cerere.out");
for(const auto x : rez){
g << (x-1) << ' '; }
return 0; }