Cod sursa(job #1446448)

Utilizator tamionvTamio Vesa Nakajima tamionv Data 1 iunie 2015 20:53:30
Problema Cerere Scor 95
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.03 kb
#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 = 0;
	for(int i = 1, a, b; i < n; ++i){
		f >> a >> b;
		--a, --b;
		radacina ^= b;
		copii[a].push_back(b); }
	radacina ^= suma_xor_pana_la(n-1); }

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; }