Submission #86683

#TimeUsernameProblemLanguageResultExecution timeMemory
86683dimash241Potemkin cycle (CEOI15_indcyc)C++17
30 / 100
36 ms14300 KiB
# include <stdio.h> # include <bits/stdc++.h> #define _USE_MATH_DEFINES_ #define ll long long #define ld long double #define Accepted 0 #define pb push_back #define mp make_pair #define sz(x) (int)(x.size()) #define every(x) x.begin(),x.end() #define F first #define S second #define For(i,x,y) for (ll i = x; i <= y; i ++) #define FOr(i,x,y) for (ll i = x; i >= y; i --) #define SpeedForce ios_base::sync_with_stdio(0), cin.tie(0) // ROAD to... Red using namespace std; inline bool isvowel (char c) { c = tolower(c); if (c == 'a' || c == 'e' || c == 'i' || c == 'y' || c == 'o' || c == 'u') return 1; return 0; } const double eps = 0.000001; const ld pi = acos(-1); const int maxn = 1e7 + 9; const int mod = 1e9 + 7; const ll MOD = 1e18 + 9; const ll INF = 1e18 + 123; const int inf = 2e9 + 11; const int mxn = 1e6 + 9; const int N = 5123; const int M = 22; const int pri = 997; const int Magic = 2101; const int dx[] = {-1, 0, 1, 0}; const int dy[] = {0, -1, 0, 1}; int n, m, k; vector < int > g[N]; int x[N], y[N]; int has[5005][5005]; int u[N], pr[N][20]; int lca (int a, int b) { if (u[a] < u[b]) swap(a, b); for (int i = 18; i >= 0; i --) { if (u[pr[a][i]] >= u[b]) a = pr[a][i]; } for (int i = 18; i >= 0;i --) { if (pr[a][i] != pr[b][i]) { a = pr[a][i]; b = pr[b][i]; } } return pr[a][0]; } int main () { cin >> n >> m ; For (i, 1, m) { cin >> x[i] >> y[i]; g[x[i]].pb(y[i]); g[y[i]].pb(x[i]); has[x[i]][y[i]] = has[y[i]][x[i]] = 1; } For (i, 1, m) { for (auto l : g[x[i]]) { if (l == y[i]) continue; for (auto r : g[y[i]]) { if (r == x[i]) continue; if (!has[l][y[i]] && !has[r][x[i]] && has[l][r]) { cout << l << ' ' << x[i] << ' ' << y[i] << ' ' << r; exit(0); } } } } for (int i = 1; i <= n; i ++) { random_shuffle(every(g[i])), u[i] = 0; for (int it = 0; it <= 18; it ++) pr[i][it] = 0; } queue < int > q; u[1] = 1; q.push(1); while (q.size()) { int v = q.front(); q.pop(); for (auto to : g[v]) { if (u[to] && pr[v][0] != to) { int x = lca(to, v); if (u[v] + u[to] - 2 * u[x] >= 3) { vector < int > st; while (v != x) { st.pb(v); v = pr[v][0]; } st.pb(x); reverse(every(st)); while (to != x) { st.pb(to); to = pr[to][0]; } for (auto it : st) cout << it << ' '; exit(0); } } if (!u[to]) { u[to] = u[v] + 1; pr[to][0] = v; for (int i = 1; i <= 18; i ++) pr[to][i] = pr[pr[to][i - 1]][i - 1]; q.push(to); } } } cout << "no"; return Accepted; } // Coded By OB
#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...