답안 #1112995

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
1112995 2024-11-15T11:06:53 Z vjudge1 Spring cleaning (CEOI20_cleaning) C++17
9 / 100
1000 ms 12392 KB
//Dost SEFEROĞLU
#pragma GCC optimize("O3,unroll-loops")
#pragma GCC target("avx2")
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define pii pair<int,int>
#define ff first
#define ss second
#define sp << " " << 
#define vi vector<int>
#define all(xx) xx.begin(),xx.end()
#define ps(xxx) cout << (xxx) << endl;
const int N = 1e5+1,inf = 1e16,MOD = 1e9+7; 
 
vi edges[N],chi(N,0),sublf(N,0),par(N);


void dfs(int node,int p) {
    par[node] = p;
    for (auto it : edges[node]) {
        if (it == p) continue;
        chi[node]++;
        dfs(it,node);
        sublf[node]+=sublf[it];
    }
    if (!chi[node]) sublf[node] = 1;
}


void solve() { 
    int n,q;
    cin >> n >> q;
    vi deg(n+1,0);
    for (int i=1;i<=n-1;i++) {
        int a,b;
        cin >> a >> b;
        edges[a].push_back(b);
        edges[b].push_back(a);
        deg[a]++,deg[b]++;
    }
    int leaf = 0;
    int root = -1;
    for (int i=1;i<=n;i++) {
        if (deg[i] >= 2) {
            root = i;
            break;
        }
    }
    dfs(root,root);
    for (int i=1;i<=n;i++) if (!chi[i]) leaf++;
    vi v;
    while (q--) {
        int k;
        cin >> k;
        int ans = 0;
        for (int j = 1;j<=k;j++) {
            int x;
            cin >> x;
            v.push_back(x);
            if (chi[x]) {
                leaf++;
                int cur = x;
                while (cur != root) {
                    sublf[cur]++;
                    cur = par[cur];
                }
            }
            chi[x]++;
        }        
        for (int i=1;i<=n;i++) if (i != root) ans+=(sublf[i]%2==0);
        if (leaf%2) cout << -1 << '\n';
        else cout << n+k-1+ans << '\n';
        for (auto x : v) {
            int cur = x;
            if (chi[x]) {
                leaf--;
                while (cur != root) {
                    sublf[cur]--;
                    cur = par[cur];
                }
            }
            chi[x]--;
        }
        v.clear();
    }
}  
 
                
                            
signed main() { 
    ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
    #ifdef Dodi
        freopen("in.txt","r",stdin);
        freopen("out.txt","w",stdout);
    #endif
    int t = 1;
    //cin >> t; 
    while (t --> 0) solve();
}
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 4944 KB Output is correct
2 Incorrect 58 ms 6408 KB Output isn't correct
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 11 ms 6816 KB Output is correct
2 Correct 8 ms 6352 KB Output is correct
3 Correct 21 ms 9936 KB Output is correct
4 Correct 27 ms 9916 KB Output is correct
5 Correct 32 ms 12392 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 1063 ms 7120 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 1060 ms 6736 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 1063 ms 8520 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 1044 ms 9728 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 4944 KB Output is correct
2 Incorrect 58 ms 6408 KB Output isn't correct
3 Halted 0 ms 0 KB -