# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
1271455 | red_souls | Spring cleaning (CEOI20_cleaning) | C++20 | 1096 ms | 16964 KiB |
#include <bits/stdc++.h>
#define ll long long
#define task "crt"
using namespace std;
const int N = 2e5 + 16;
int n, q, u, v, a[N];
vector <int> adj[N];
ll result;
/*
7 3
1 2
2 4
4 5
5 6
5 7
3 4
1 4
2 2 4
1 1
*/
void deleteEdge(int u, int v) {
for (int i = 0; i < adj[u].size(); i++) {
if (adj[u][i] == v) {
adj[u].erase(adj[u].begin() + i);
break;
}
}
for (int i = 0; i < adj[v].size(); i++) {
if (adj[v][i] == u) {
adj[v].erase(adj[v].begin() + i);
break;
}
}
}
int leaves[N], leafCnt;
void preDfs(int k, int p) {
if (adj[k].size() == 1) {
leaves[k] = 1;
}
else {
leaves[k] = 0;
}
for (auto v : adj[k]) {
if (v == p) {
continue;
}
preDfs(v, k);
leaves[k] += leaves[v];
}
}
int main() {
ios_base :: sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
if (fopen(task".inp", "r")) {
freopen(task".inp", "r", stdin);
freopen(task".out", "w", stdout);
}
cin >> n >> q;
for (int i = 1; i < n; i++) {
cin >> u >> v;
adj[u].push_back(v);
adj[v].push_back(u);
}
for (int i = 1; i <= n; i++) {
leafCnt += (adj[i].size() == 1);
}
while (q--) {
int d;
cin >> d;
set <int> distinct;
for (int i = 1; i <= d; i++) {
cin >> a[i];
if (adj[a[i]].size() == 1) {
distinct.insert(a[i]);
}
}
if ((leafCnt - distinct.size() + d) & 1) {
cout << -1 << "\n";
continue;
}
for (int i = 1; i <= d; i++) {
adj[n + i].push_back(a[i]);
adj[a[i]].push_back(n + i);
}
preDfs(1, 1);
if (leaves[1] & 1) {
result = -1;
}
else {
result = 0;
for (int i = 2; i <= n + d; i++) {
if (leaves[i] & 1) {
result++;
}
else {
result += 2;
}
}
}
cout << result << "\n";
for (int i = 1; i <= d; i++) {
deleteEdge(n + i, a[i]);
}
}
return 0;
}
컴파일 시 표준 에러 (stderr) 메시지
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |