Submission #1043626

#TimeUsernameProblemLanguageResultExecution timeMemory
1043626beaconmcSpring cleaning (CEOI20_cleaning)C++14
34 / 100
1055 ms15528 KiB
#include <bits/stdc++.h> typedef long long ll; #define FOR(i,x,y) for(ll i=x; i<y; i++) #define FORNEG(i,x,y) for(ll i=x; i>y; i--) using namespace std; vector<ll> edges[200005]; ll realans = 0; int dp(ll a, ll p){ ll ans = 0; if (edges[a].size() <= 1) ans = 1; for (auto&i : edges[a]){ if (i != p) ans += dp(i, a); } if (p!=-1) realans += 1 + (ans+1)%2; return 1 + (ans+1)%2; } int main(){ ll n,q; cin >> n >> q; FOR(i,0,n-1){ ll a,b; cin >> a >> b; edges[a].push_back(b); edges[b].push_back(a); } FOR(i,0,q){ ll d; cin >> d; ll cur = n+1; FOR(k,0,d){ ll temp; cin >> temp; edges[temp].push_back(cur++); } ll root = -1; ll cnt = d; FOR(j,1,n+1){ if (edges[j].size() != 1){ root = j; }else{ cnt++; } } if (cnt%2==1) cout << -1 << "\n"; else{ realans = 0; dp(root, -1); cout << realans << "\n"; } FOR(i,1,n+1){ while (edges[i].size() && edges[i][edges[i].size()-1]>n){ edges[i].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...