Submission #314912

#TimeUsernameProblemLanguageResultExecution timeMemory
314912mohamedsobhi777Potemkin cycle (CEOI15_indcyc)C++14
30 / 100
1093 ms14328 KiB
#include <bits/stdc++.h> #pragma GCC optimize("-Ofast") //#pragma GCC optimize("trapv") #pragma GCC target("sse,sse2,sse3,ssse3,sse4,sse4.2,popcnt,abm,mmx,avx2,tune=native") #pragma GCC optimize("-ffast-math") #pragma GCC optimize("-funroll-loops") #define I inline void #define S struct #define vi vector<int> #define vii vector<pair<int, int>> #define pii pair<int, int> #define pll pair<ll, ll> using namespace std; using ll = long long; using ld = long double; const int N = 1000 + 7, mod = 1e9 + 7; const ll inf = 2e18; // How interesting! int n, m, t; int st[N], prv[N]; vector<int> adj[N]; map<pii, int> ed; void cycle(vector<int> v, int x, int y) { int k = 0; while (x != y && k++ < 50) { v.push_back(x); x = prv[x]; } int sz = (int)v.size(); if (sz < 4) return; bool bad = 0; for (int i = 0; i < sz; ++i) { for (int j = 0; j < n; ++j) { if (i == j || (i + 1) % sz == j || (j + 1) % sz == i) continue; if (ed[{v[i], v[j]}]) { bad = 1; break; } } } if (!bad) { for (auto u : v) cout << u << " "; exit(0); } } void dfs(int x, int p) { st[x] = ++t; prv[x] = p; for (auto u : adj[x]) { if (u == p) continue; if (st[u]) { if (st[u] < st[x]) { cycle({u}, x, u); } else { cycle({x}, u, x); } } else { dfs(u, x); } } } int main() { ios_base::sync_with_stdio(0); cin.tie(0); //freopen("in.in", "r", stdin); cin >> n >> m; for (int i = 0; i < m; ++i) { int u, v; cin >> u >> v; adj[u].push_back(v); adj[v].push_back(u); ed[{u, v}] = ed[{v, u}] = 1; } for (int i = 1; i <= n; ++i) { memset(st, 0, sizeof st); memset(prv, 0, sizeof prv); t = 0; dfs(i, i); } cout << "no"; return 0; } /* - bounds sir (segtree = 4N, eulerTour = 2N, ...) - a variable defined twice? - will overflow? - is it a good complexity? - don't mess up indices (0-indexed vs 1-indexed) - reset everything between testcases. */
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...