Submission #669585

#TimeUsernameProblemLanguageResultExecution timeMemory
669585dozerSpring cleaning (CEOI20_cleaning)C++14
34 / 100
1097 ms18876 KiB
#include <bits/stdc++.h> using namespace std; #define fileio() freopen("input.txt", "r", stdin), freopen("output.txt", "w", stdout) #define fastio() cin.tie(0), ios_base::sync_with_stdio(0) #define pb push_back #define sp " " #define endl "\n" #define pii pair<int, int> #define st first #define nd second #define N 200005 vector<int> adj[N]; int val[N], par[N], deg[N]; int ans; int dfs(int node, int root) { int flag = 0; par[node] = root; for (auto i : adj[node]) { if (i != root) flag ^= dfs(i, node); } if (adj[node].size() == 1) flag ^= 1; val[node] = flag; if (flag == 0) val[node] = 2; ans += val[node]; //cout<<node<<sp<<flag<<endl; return flag; } int32_t main() { fastio(); int n, q; cin>>n>>q; for (int i = 1; i < n; i++) { int u, v; cin>>u>>v; adj[u].pb(v); adj[v].pb(u); } while(q--) { int d; cin>>d; ans = 0; vector<int> v(d, 0); for (int i = 0; i < d; i++) { int node; cin>>node; adj[n + i + 1].pb(node); adj[node].pb(n + i + 1); v[i] = node; } int flag = dfs(1, 0); ans -= val[1]; if (flag) cout<<-1<<endl; else cout<<ans<<endl; for (int i = 0; i < d; i++) { int node = v[i]; adj[node].pop_back(); adj[n + i + 1].pop_back(); } } cerr<<"time taken : "<<(float)clock() / CLOCKS_PER_SEC<<" seconds\n"; }
#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...