#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);
}
}
}
# |
결과 |
실행 시간 |
메모리 |
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 |
- |
# |
결과 |
실행 시간 |
메모리 |
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 |
# |
결과 |
실행 시간 |
메모리 |
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 |
# |
결과 |
실행 시간 |
메모리 |
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 |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Execution timed out |
1054 ms |
5212 KB |
Time limit exceeded |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Execution timed out |
1043 ms |
7248 KB |
Time limit exceeded |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
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 |
- |