Submission #1054921

# Submission time Handle Problem Language Result Execution time Memory
1054921 2024-08-12T13:03:22 Z kiryl_krutsko Spring cleaning (CEOI20_cleaning) C++14
34 / 100
1000 ms 15304 KB

#include <iostream>
#include <vector>

using namespace std;

struct node {
	int num = -2;
	vector<node*> conns;
};
node empty_node;

int check_subtree(node* root, int parent_num) {
	int ans = 0;
	int odd_children_num = 0;
	for (auto child : root->conns) {
		if (child->num == parent_num) continue;
		int child_cost = check_subtree(child, root->num);
		if (child_cost >= 0) {
			ans += (child_cost + 1);
			odd_children_num++;
		}
		else ans += (2 - child_cost);
	}
	if (odd_children_num % 2 == 1) return ans;
	else return -ans;
}

void answer(node* root) {
	if (root->conns.size() == 1) {
		if (root->conns[0]->conns.size() == 1) cout << 1 << endl;
		else answer(root->conns[0]);
		return;
	}
	int total_cost = check_subtree(root, -1);
	if (total_cost < 0) cout << -total_cost;
	else cout << -1;
	cout << endl;
}

int main()
{
	int n, q;
	cin >> n >> q;
	vector<node> vec(n);
	int a, b; 
	vec[0].num = 0;
	for (int i = 1; i < n; i++) {
		vec[i].num = i;
		cin >> a >> b;
		a--; b--;
		vec[a].conns.push_back(&vec[b]);
		vec[b].conns.push_back(&vec[a]);
	}
	int new_num;
	for (int i = 0; i < q; i++) {
		cin >> new_num;
		vector<int> added;
		for (int j = 0; j < new_num; j++) {
			cin >> a; a--;
			added.push_back(a);
			vec[a].conns.push_back(&empty_node);
		}
		answer(&vec[0]);
		for (int i : added) {
			vec[i].conns.erase(vec[i].conns.begin() + vec[i].conns.size() - 1);
		}
	}
}
# Verdict Execution time Memory Grader output
1 Correct 0 ms 348 KB Output is correct
2 Execution timed out 1098 ms 2548 KB Time limit exceeded
3 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 12 ms 2256 KB Output is correct
2 Correct 12 ms 2264 KB Output is correct
3 Correct 26 ms 8144 KB Output is correct
4 Correct 37 ms 7624 KB Output is correct
5 Correct 45 ms 9920 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 15 ms 2768 KB Output is correct
2 Correct 14 ms 2772 KB Output is correct
3 Correct 38 ms 13996 KB Output is correct
4 Correct 55 ms 15304 KB Output is correct
5 Correct 35 ms 12624 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 151 ms 3408 KB Output is correct
2 Correct 97 ms 2388 KB Output is correct
3 Correct 113 ms 2020 KB Output is correct
4 Correct 166 ms 2392 KB Output is correct
5 Correct 134 ms 2648 KB Output is correct
6 Correct 190 ms 2896 KB Output is correct
# Verdict Execution time Memory Grader output
1 Execution timed out 1054 ms 5212 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Execution timed out 1043 ms 7248 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 0 ms 348 KB Output is correct
2 Execution timed out 1098 ms 2548 KB Time limit exceeded
3 Halted 0 ms 0 KB -