답안 #1054863

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
1054863 2024-08-12T12:45:42 Z kiryl_krutsko Spring cleaning (CEOI20_cleaning) C++14
9 / 100
1000 ms 10108 KB

#include <iostream>
#include <vector>

using namespace std;

struct node {
	int num = -1;
	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) {
	int total_cost = check_subtree(root, -1);
	if (total_cost < 0) cout << -total_cost;
	else if (root->conns.size() == 1) 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);
		}
	}
}
# 결과 실행 시간 메모리 Grader output
1 Incorrect 0 ms 348 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 12 ms 2128 KB Output is correct
2 Correct 12 ms 2172 KB Output is correct
3 Correct 31 ms 8144 KB Output is correct
4 Correct 36 ms 7696 KB Output is correct
5 Correct 48 ms 10108 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 14 ms 2772 KB Output is correct
2 Incorrect 15 ms 2772 KB Output isn't correct
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 150 ms 3408 KB Output is correct
2 Incorrect 84 ms 2388 KB Output isn't correct
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 1044 ms 5212 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 1044 ms 7084 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 0 ms 348 KB Output isn't correct
2 Halted 0 ms 0 KB -