Submission #940826

#TimeUsernameProblemLanguageResultExecution timeMemory
940826berrNewspapers (CEOI21_newspapers)C++17
100 / 100
113 ms47476 KiB
#include <bits/stdc++.h> using namespace std; #define int long long int32_t main(){ ios_base::sync_with_stdio(false); cin.tie(0); int n, m; cin >> n >> m; vector<vector<int>> g(n); vector<int> d(n), val(n); for(int i=0; i<m; i++){ int x, y; cin >> x >> y; x--; y--; g[x].push_back(y); g[y].push_back(x); } int flag = 1; auto dfs=[&](int v, int p, auto&&dfs)->int{ if(v==p) d[v]=0; else d[v]=d[p]+1; val[v] = d[v]; vector<int> a; for(auto i: g[v]){ if(i!=p) a.push_back(dfs(i, v, dfs)); } sort(a.begin(), a.end()); /* sort(g[v].begin(), g[v].end(), [&](int x, int y){ return val[x]<val[y]; });*/ if(a.size()) val[v]=max(val[v], a.back()); if(v==p){ if(a.size()>2 && a[a.size()-3] >2) flag =0; } return val[v]; }; if(n==m+1) for(int i=0; i<n; i++) dfs(i, i, dfs); else flag =0; if(flag){ cout<<"YES\n"; if(n==1) cout<<1<<" "<<1<<"\n"; else if(n==2) cout<<"2 2 2"<<"\n"; else{ int check = 1; vector a(n, vector(n, vector<int>())); vector vis(n, vector(n, 0)); auto dfs2=[&](int v, int p, auto&&dfs2)->vector<int>{ vector<int> s; if(vis[v][p]) return a[v][p]; vis[v][p]=1; // cout<<v<<" "<<d[v]<<" "<<val[v]<<"\n"; if(d[v]==val[v]) return a[v][p]=s; else if(d[v]>=val[v]-1){ s.push_back(v); return a[v][p]=s; } else{ vector<int> b; vector<vector<int>> c; for(auto i: g[v]){ if(i==p) continue; c.push_back(dfs2(i, v, dfs2)); } sort(c.begin(), c.end(), [&](auto x, auto y){ return x.size()<y.size(); }); if(!c.back().size()){ return b; } if(c.size()>1){ int k = c.size()-2; reverse(c[k].begin(), c[k].end()); } if(v!=p){ for(auto i: c.back()) b.push_back(i); b.push_back(v); for(int i=0; i<c.size()-1; i++){ if(!c[i].size()){ continue; } for(auto j: c[i]){ b.push_back(j); } b.push_back(v); } } else{ for(auto i: c.back()) b.push_back(i); b.push_back(v); for(int i=0; i<c.size()-1; i++){ if(!c[i].size()){ continue; } for(auto j: c[i]){ b.push_back(j); } if(i!=c.size()-2) b.push_back(v); } } if(v!=p){ if(c.size()>=2 && c[c.size()-2].size()>1) check=0; } return a[v][p]=b; } }; vector<int> x; for(int i=0; i<n; i++){ dfs(i, i, dfs); check = 1; auto s = dfs2(i, i, dfs2); if(!x.size()&&check) x = s; else if(s.size()<x.size()&&check) x = s; } // reverse(x.begin(), x.end()); for(int i=x.size()-1; i>=0; i--){ x.push_back(x[i]); } cout<<x.size()<<"\n"; for(auto i: x) cout<<i+1<<" "; cout<<"\n"; } } else cout<<"NO\n"; }

Compilation message (stderr)

newspapers.cpp: In lambda function:
newspapers.cpp:101:39: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<std::vector<long long int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  101 |                         for(int i=0; i<c.size()-1; i++){
      |                                      ~^~~~~~~~~~~
newspapers.cpp:118:39: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<std::vector<long long int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  118 |                         for(int i=0; i<c.size()-1; i++){
      |                                      ~^~~~~~~~~~~
newspapers.cpp: In instantiation of 'main()::<lambda(long long int, long long int, auto:24&&)> [with auto:24 = main()::<lambda(long long int, long long int, auto:24&&)>&]':
newspapers.cpp:146:41:   required from here
newspapers.cpp:101:39: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<std::vector<long long int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  101 |                         for(int i=0; i<c.size()-1; i++){
      |                                      ~^~~~~~~~~~~
newspapers.cpp:118:39: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<std::vector<long long int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  118 |                         for(int i=0; i<c.size()-1; i++){
      |                                      ~^~~~~~~~~~~
newspapers.cpp:126:33: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<std::vector<long long int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  126 |                             if(i!=c.size()-2)
      |                                ~^~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...