Cod sursa(job #1446455)

Utilizator tamionvTamio Vesa Nakajima tamionv Data 1 iunie 2015 21:04:51
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 = 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; }