Submission #360098

#TimeUsernameProblemLanguageResultExecution timeMemory
360098amunduzbaevEaster Eggs (info1cup17_eastereggs)C++14
0 / 100
4 ms2028 KiB
#include <bits/stdc++.h> #include "grader.h" #ifndef EVAL #include "grader.cpp" #endif #define pb push_back #define ff first #define ss second #define sz(x) (int)x.size() #define pii pair<int, int> using namespace std; const int NN = 600; vector<pii> edges[NN]; vector<int> vv[NN]; int nn, used[NN]; void dfs(int u, int p = -1){ //if(ok) cout<<u<<" "; vv[u].pb(u); for(auto x:edges[u]){ if(x.ff == p || used[x.ss]) continue; dfs(x.ff, u); for(auto xx:vv[x.ff]) vv[u].pb(xx); } } /* 13 1 2 1 5 1 6 2 3 2 4 1 7 7 8 7 9 8 10 8 11 9 12 9 13 5 1 3 5 9 13 6 1 2 1 3 1 4 1 5 1 6 6 1 2 3 4 5 6 16 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 10 10 11 11 12 12 13 13 14 14 15 15 16 16 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 */ int dfs_cc(int u, int p = -1){ pii mx = {-1, -1}; for(auto x:edges[u]){ if(used[x.ss] || x.ff == p) continue; if(sz(vv[x.ff]) > mx.ff) mx.ff = sz(vv[x.ff]), mx.ss = x.ff; } if(mx.ff * 2 >= nn) return dfs_cc(mx.ss, u); return u; } int solve(int cur){ for(int i=0;i<NN;i++) vv[i].clear(); dfs(cur); int centr = dfs_cc(cur); for(int i=0;i<NN;i++) vv[i].clear(); dfs(centr); vector<pair<int, pii>> childs; for(auto x:edges[centr]) if(!used[x.ss]) childs.pb({sz(vv[x.ff]), x}); sort(childs.begin(), childs.end()); vector<int> qq = vv[childs.back().ss.ff]; qq.pb(centr); vector<int> uu(NN, 0); uu[childs.back().ss.ss] = 1; childs.pop_back(); int last = -1, nw = -1; int start; for(auto x:childs){ last = sz(qq); nw = x.ff + last; if(abs(nw*2 - nn) <= abs(nn - last*2)){ for(auto xx : vv[x.ss.ff]) qq.pb(xx); }else { start = x.ss.ff; break; } uu[x.ss.ss] = 1; } for(auto &x:qq) x += 1; int res = query(qq); if(res){ for(auto x:edges[centr]){ if(uu[x.ss]) continue; else used[x.ss] = 1; } nn = sz(qq); if(nn == 2){ if(query({qq.back()})) return qq.back()-1; else { qq.pop_back(); return qq.back()-1; } } if(nn == 1) return centr; return solve(centr); } else{ for(auto x:edges[centr]){ if(uu[x.ss]) used[x.ss] = 1; } nn = (nn - sz(qq)); if(nn == 1) return start; nn++; return solve(centr); } } int findEgg (int N, vector < pair < int, int > > bridges){ memset(used, 0, sizeof used); for(int i=0;i<=NN;i++) edges[i].clear(), vv[i].clear(); nn = N; for(int i=0;i<sz(bridges);i++){ edges[bridges[i].ff-1].pb({bridges[i].ss-1, i}); edges[bridges[i].ss-1].pb({bridges[i].ff-1, i}); } //nn = N; //dfs(0); return solve(0)+1; }

Compilation message (stderr)

eastereggs.cpp: In function 'int solve(int)':
eastereggs.cpp:143:22: warning: 'start' may be used uninitialized in this function [-Wmaybe-uninitialized]
  143 |   if(nn == 1) return start;
      |                      ^~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...