# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
1271458 | red_souls | Spring cleaning (CEOI20_cleaning) | C++20 | 1096 ms | 9080 KiB |
#include <bits/stdc++.h>
#define ll long long
#define int 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
*/
int leafCnt, leaves[N], b[N];
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 par[N];
void dfs(int k, int p) {
for (auto v : adj[k]) {
if (v == p) {
continue;
}
par[v] = k;
dfs(v, k);
}
}
vector <int> trace(int u) {
vector <int> path;
while (u) {
path.push_back(u);
u = par[u];
}
return path;
}
void updateTree(int u) {
vector <int> path = trace(u);
for (auto x : path) {
b[x] ^= 1;
}
}
int getSubtree(int u) {
int ans = 0;
for (int i = 1; i <= n; i++) {
ans += b[i];
}
return ans;
}
signed 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);
}
preDfs(1, 1);
for (int i = 1; i <= n; i++) {
if (leaves[i] & 1) {
b[i] = 1;
}
else {
b[i] = 0;
}
}
dfs(1, 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++) {
updateTree(a[i]);
}
result = 0;
ll odd = getSubtree(1) + d;
ll even = n + d - odd;
result = odd + 2 * even;
if (b[1] == 1) {
result--;
}
else {
result -= 2;
}
cout << result << "\n";
for (int i = 1; i <= d; i++) {
updateTree(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... |