Submission #1159078

#TimeUsernameProblemLanguageResultExecution timeMemory
1159078Kaztaev_AlisherSpring cleaning (CEOI20_cleaning)C++20
0 / 100
1096 ms12356 KiB
#include <bits/stdc++.h> #define ios ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0) #define file(s) if (fopen(s".in", "r")) freopen(s".in", "r", stdin), freopen(s".out", "w", stdout) #define all(a) a.begin() , a.end() #define F first #define S second using namespace std; using ll = long long; const ll N = 2e5+5 , inf = 2e9 + 7; const ll INF = 1e18 , mod = 1e9+7; ll a[N] , b[N] , mx , par[N] , was[N] , dp[N]; vector<int> g[N] , vec; void dfs(int v, int p){ dp[v] = dp[p]+1; par[v] = p; if(dp[v] > dp[mx]) mx = v; for(int to : g[v]){ if(to != p){ dfs(to,v); } } } void go(int v , int p){ dp[v] = dp[p]+1; for(int to : g[v]){ if(to != p && was[to] == 0){ go(to,v); } } if(g[v].size() == 1){ vec.push_back(dp[v]); } } void solve(){ int n , q; cin >> n >> q; for(int i = 1; i < n; i++){ cin >> a[i] >> b[i]; } while(q--){ int k; cin >> k; for(int i = 1; i <= n+k; i++) g[i].clear() , was[i] = par[i] = 0; for(int i = 1; i < n; i++){ g[a[i]].push_back(b[i]); g[b[i]].push_back(a[i]); } for(int i = 1; i <= k; i++){ int a; cin >> a; g[a].push_back(i+n); g[i+n].push_back(a); } mx = 1; dfs(1,0); dfs(mx,0); vector<int> path; while(mx > 0){ path.push_back(mx); mx = par[mx]; } reverse(all(path)); ll cur = 0 , res = 0; for(int x : path) was[x] = 1; for(int x : path){ for(int to : g[x]){ if(was[to] == 0){ vec.clear(); dp[x] = 0; go(to,x); sort(all(vec)); ll ans = 0; if(vec.size() % 2){ ans = vec[0]; } else { ans = vec[0]+vec[1]; } res += vec.size(); cur += ans; } } } if(res % 2) cout << "-1\n"; else cout << cur+n-1 << "\n"; } } /* */ signed main(){ ios; solve(); }
#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...