제출 #963517

#제출 시각아이디문제언어결과실행 시간메모리
963517GhettoSpring cleaning (CEOI20_cleaning)C++17
34 / 100
1069 ms21048 KiB
#include <bits/stdc++.h>
using namespace std;
const int MAX_N = 2e5 + 5;
 
int old_n, q;
int n;
vector<int> adj[MAX_N];
int n_added[MAX_N];
int n_ls[MAX_N];
int ans;
void dfs(int u, int par) {
    n_ls[u] = (adj[u].size() == 1) ? 1 : 0;
 
    for (int v : adj[u]) {
        if (v == par) continue;
        dfs(v, u);
        n_ls[u] += n_ls[v];        
    }
 
    n_ls[u] %= 2;
    if (par != -1 && n_ls[u] == 0) n_ls[u] = 2; 
    ans += n_ls[u];
}
 
void init() {
    ans = 0;
}
void do_query(int query) {
    int d_n; cin >> d_n;
    n = old_n + d_n;
    init();
    for (int u = old_n + 1; u <= n; u++) {
        int v; cin >> v;
        adj[u].push_back(v);
        adj[v].push_back(u);
        n_added[u]++;
        n_added[v]++;
    }
 
    for (int u = 1; u <= n; u++) {
        if (adj[u].size() == 1) continue;
        
        dfs(u, -1);
        if (n_ls[u]) cout << "-1" << '\n';
        else cout << ans << '\n';
 
        for (int v = 1; v <= n; v++) {
            while (n_added[v]) {
                adj[v].pop_back();
                n_added[v]--;
            }
        }
        return;    
    }
}
 
int main() {
    // freopen("spring.in", "r", stdin);
 
    cin.sync_with_stdio(false);
    cin.tie(0);
 
    cin >> old_n >> q;
    for (int i = 1; i < old_n; i++) {
        int u, v; cin >> u >> v;
        adj[u].push_back(v);
        adj[v].push_back(u);
    }
 
    for (int i = 1; i <= q; i++) do_query(i);
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...