Submission #1302613

#TimeUsernameProblemLanguageResultExecution timeMemory
1302613witek_cppEaster Eggs (info1cup17_eastereggs)C++20
100 / 100
10 ms528 KiB
#include <iostream> #include <vector> #include <algorithm> #include <unordered_set> using namespace std; typedef long long ll; #define pb push_back #define all(a) a.begin(), a.end() #define sz(a) int(a.size()) using pii = pair<int, int>; using vi = vector<int>; using vvi = vector<vi>; // External function provided by the problem int query(vector<int> islands); vvi g; vi ak; int mid; int ile_poszlo; vi pyt; void dfs_pyt(int v, int p) { if (ile_poszlo >= mid) return; if (ak[v]) { ile_poszlo++; } pyt.pb(v); for (int u : g[v]) { if (u == p) continue; dfs_pyt(u, v); } } int findEgg(int n, vector<pii> kr) { g.assign(n + 1, vi()); for (auto [u, v] : kr) { g[u].pb(v); g[v].pb(u); } ak.assign(n + 1, 1); // 1 if potential suspect unordered_set<int> zb; for (int i = 1; i <= n; ++i) zb.insert(i); while (sz(zb) > 1) { mid = sz(zb) / 2; pyt.clear(); ile_poszlo = 0; // Start from an arbitrary suspect dfs_pyt(*zb.begin(), 0); int val = query(pyt); if (val) { // Collect old suspects in pyt BEFORE resetting ak unordered_set<int> lol; for (int ele : pyt) { if (ak[ele]) { lol.insert(ele); } } // Reset ak for (int i = 1; i <= n; ++i) ak[i] = 0; // Set new ak and zb for (int ele : lol) ak[ele] = 1; zb = move(lol); } else { for (int ele : pyt) { if (ak[ele]) { zb.erase(ele); ak[ele] = 0; } } } // Removed the unnecessary loop here } return *zb.begin(); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...