Submission #342511

#TimeUsernameProblemLanguageResultExecution timeMemory
342511leinad2Spring cleaning (CEOI20_cleaning)C++17
28 / 100
1098 ms9324 KiB
#include<bits/stdc++.h> using namespace std; int n, i, j, k, r, q, a, b, cnt, sz[100010], p[100010], ans; vector<int>adj[100010]; void dfs(int v, int par) { p[v]=par; sz[v]=0; if(adj[v].size()==1) { sz[v]=1; return; } for(int i=0;i<adj[v].size();i++) { int p=adj[v][i]; if(p==par)continue; dfs(p, v); sz[v]+=sz[p]; } } int main() { for(scanf("%d %d", &n, &q);++i<n;) { scanf("%d %d", &a, &b); adj[a].push_back(b); adj[b].push_back(a); } ans=n-1; for(i=0;i++<n;) { if(adj[i].size()>1) { r=i; break; } } dfs(r, 0); for(i=0;i++<n;)sz[i]%=2; for(i=0;i++<n;) { if(sz[i]%2==0)ans++; } while(q--) { cnt=n; vector<int>v; scanf("%d", &a); while(a--) { scanf("%d", &b); ans++; v.push_back(b); adj[b].push_back(++cnt); if(adj[b].size()==2)continue; while(1) { sz[b]=1-sz[b]; if(sz[b]==0)ans++; else ans--; if(b==r)break; b=p[b]; } } if(sz[r]%2) { puts("-1"); goto w; } printf("%d\n", ans-1); w:; for(i=0;i<v.size();i++) { b=v[i]; ans--; adj[b].pop_back(); if(adj[b].size()==1)continue; while(1) { sz[b]=1-sz[b]; if(sz[b]==0)ans++; else ans--; if(b==r)break; b=p[b]; } } } }

Compilation message (stderr)

cleaning.cpp: In function 'void dfs(int, int)':
cleaning.cpp:14:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   14 |     for(int i=0;i<adj[v].size();i++)
      |                 ~^~~~~~~~~~~~~~
cleaning.cpp: In function 'int main()':
cleaning.cpp:73:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   73 |         for(i=0;i<v.size();i++)
      |                 ~^~~~~~~~~
cleaning.cpp:24:14: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   24 |     for(scanf("%d %d", &n, &q);++i<n;)
      |         ~~~~~^~~~~~~~~~~~~~~~~
cleaning.cpp:26:14: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   26 |         scanf("%d %d", &a, &b);
      |         ~~~~~^~~~~~~~~~~~~~~~~
cleaning.cpp:49:14: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   49 |         scanf("%d", &a);
      |         ~~~~~^~~~~~~~~~
cleaning.cpp:52:18: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   52 |             scanf("%d", &b);
      |             ~~~~~^~~~~~~~~~
#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...