Submission #930765

#TimeUsernameProblemLanguageResultExecution timeMemory
930765LucaIlieSpring cleaning (CEOI20_cleaning)C++17
34 / 100
1090 ms20532 KiB
#include <bits/stdc++.h> using namespace std; const int MAX_N = 2e5; int leafs[MAX_N + 1], a[MAX_N]; vector<int> adj[MAX_N + 1]; int ans; void dfs( int u, int p ) { leafs[u] = (adj[u].size() == 1); for ( int v: adj[u] ) { if ( v == p ) continue; dfs( v, u ); leafs[u] += leafs[v]; } ans += 2 - leafs[u] % 2; } int main() { int n, q; cin >> n >> q; for ( int i = 0; i < n - 1; i++ ) { int u, v; cin >> u >> v; adj[u].push_back( v ); adj[v].push_back( u ); } for ( int i = 0; i < q; i++ ) { int d; cin >> d; for ( int i = 0; i < d; i++ ) { cin >> a[i]; int p = a[i], v = n + 1 + i; adj[p].push_back( v ); adj[v].push_back( p ); } int r = 1; while ( adj[r].size() == 1 ) r++; ans = 0; dfs( r, 0 ); ans -= 2 - leafs[r] % 2; cout << (leafs[r] % 2 == 0 ? ans : -1) << "\n"; for ( int i = d - 1; i >= 0; i-- ) { int p = a[i], v = n + 1 + i; adj[p].pop_back(); adj[v].pop_back(); } } return 0; }
#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...