#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);
}
}
}
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Incorrect |
0 ms |
348 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
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 |
# |
Verdict |
Execution time |
Memory |
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 |
- |
# |
Verdict |
Execution time |
Memory |
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 |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Execution timed out |
1044 ms |
5212 KB |
Time limit exceeded |
2 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Execution timed out |
1044 ms |
7084 KB |
Time limit exceeded |
2 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Incorrect |
0 ms |
348 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |