Submission #298565

#TimeUsernameProblemLanguageResultExecution timeMemory
298565shrek12357Poklon (COCI17_poklon7)C++14
12 / 120
1082 ms17784 KiB
#include <iostream>
#include <vector>
#include <algorithm>
#include <string>
#include <map>
#include <set>
#include <climits>
#include <cmath>
#include <fstream>
#include <queue>
using namespace std;

const int MAXN = 1e6 + 5;
pair<int, int> vals[MAXN];
int tot = 0;

int dfs(int src) {
	int val1 = 0, val2 = 0;
	if (vals[src].first > 0) {
		val1 = dfs(vals[src].first);
	}
	else {
		val1 = -1 * vals[src].first;
	}
	if (vals[src].second > 0) {
		val2 = dfs(vals[src].second);
	}
	else {
		val2 = vals[src].second * -1;
	}
	tot += max(val1, val2) - min(val1, val2);
	return max(val1, val2) * 2;
}

int main() {
	int n;
	cin >> n;

	for (int i = 0; i < n; i++) {
		int a, b;
		cin >> a >> b;
		vals[i + 1] = { a, b };
		if (a < 0) {
			tot += -1 * a;
		}
		if (b < 0) {
			tot += -1 * b;
		}
	}
	dfs(1);
	bool used = false;
	for (int i = 20; i >= 0; i--) {
		if (pow(2, i) > tot) {
			if (used) {
				cout << 0;
			}
		}
		else {
			used = true;
			cout << 1;
			tot -= pow(2, i);
		}
	}
	cout << endl;
}
#Verdict Execution timeMemoryGrader output
Fetching results...