Submission #1166837

#TimeUsernameProblemLanguageResultExecution timeMemory
1166837dragstSpring cleaning (CEOI20_cleaning)C++20
34 / 100
1095 ms25276 KiB
#include <bits/stdc++.h> using namespace std; pair<long long, long long> dp[200005]; long long p[200005], leaf[200005]; vector<long long> adj[200005], vv; void dfs(long long x) { dp[x]=make_pair(0LL, 0LL); if (adj[x].size()==1) {leaf[x]=1;} else {leaf[x]=0;}; for (auto y: adj[x]) { if (y!=p[x]) { p[y]=x; dfs(y); dp[x].first+=dp[y].first+dp[y].second; dp[x].second+=dp[y].second; dp[x].second%=2; if (dp[x].second==0) {dp[x].second=2;}; }; }; if (x>1 && leaf[x]) {dp[x].second=1;}; } int main() { ios_base::sync_with_stdio(false); cin.tie(nullptr); long long n, q, i, u, v; cin >> n >> q; for (i=1; i<n; i++) { cin >> u >> v; adj[u].push_back(v); adj[v].push_back(u); }; dfs(1); while (q--) { cin >> i; v=n+1; while (i--) { cin >> u; vv.push_back(u); adj[u].push_back(v); adj[v].push_back(u); v++; }; dfs(1); if (leaf[1]==1 && dp[1].second==2) {cout << -1 << "\n";} else if (leaf[1]==0 && dp[1].second==1) {cout << -1 << "\n";} else {cout << dp[1].first << "\n";}; while (!vv.empty()) { adj[adj[vv.back()].back()].pop_back(); adj[vv.back()].pop_back(); vv.pop_back(); }; }; }
#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...