Submission #1323099

#TimeUsernameProblemLanguageResultExecution timeMemory
1323099adiyerEaster Eggs (info1cup17_eastereggs)C++20
10 / 100
8 ms524 KiB
#include <bits/stdc++.h> #include "grader.h" using namespace std; const int MAXN = (1 << 9) + 3; int p1, p2, diff; int del[MAXN], sz[MAXN]; vector < int > g[MAXN]; void calc(int v, int p = -1){ sz[v] = 1; for(int u : g[v]) if(u != p && !del[u]) calc(u, v), sz[v] += sz[u]; } void upd(int v, int p, int s){ for(int u : g[v]){ if(!del[u] && u != p){ upd(u, v, s); if(abs(sz[u] * 2 - s) < diff) diff = abs(sz[u] * 2 - s), p1 = v, p2 = u; } } } void add(int v, int p, vector < int > &x){ x.push_back(v); for(int u : g[v]) if(u != p && !del[u]) add(u, v, x); } int centroid(int v){ calc(v); if(sz[v] == 1) return v; diff = (1 << 10), p1 = p2 = 0; upd(v, -1, sz[v]); vector < int > v1, v2; add(p1, p2, v1); add(p2, p1, v2); if(query(v1)){ for(int x : v2) del[x] = 1; return centroid(v1.back()); } else{ for(int x : v1) del[x] = 1; return centroid(v2.back()); } } int findEgg (int n, vector < pair < int, int > > bridges){ for(int i = 1; i <= n; i++) g[i].clear(), sz[i] = del[i] = 0; for(auto [x, y] : bridges) g[x].push_back(y), g[y].push_back(x); return centroid(1); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...