Submission #1259583

#TimeUsernameProblemLanguageResultExecution timeMemory
1259583nqknhtPotemkin cycle (CEOI15_indcyc)C++20
20 / 100
169 ms189684 KiB
#include <bits/stdc++.h> #define ll long long #define fi first #define se second #define len(s) (ll) s.size() #define LS(x) (1 << x) const ll I = 3e5 + 9; const ll Z = 1e9 + 7; using namespace std; int u[I], v[I], n, m; vector<int> adj[1506]; namespace sub1 { int dis[156], trace[145]; bool markE[141][156], off[156], check[145]; queue<int> q; void solve() { for (int i = 1; i <= m; i++) markE[u[i]][v[i]] = markE[v[i]][u[i]] = true; for (int i = 1; i <= m; i++) { memset(off, false, sizeof off); for (int j = 1; j <= n; j++) if (markE[j][u[i]] && markE[j][v[i]]) { off[j] = true; // cout << j << "\n"; } memset(dis, 10, sizeof dis); memset(check, false, sizeof check); dis[u[i]] = 0; q.push(u[i]); while (!q.empty()) { int af = q.front(); q.pop(); if (check[af]) continue; // cout << af << " " << dis[af] << "\n"; check[af] = true; for (auto z : adj[af]) { if (off[z] || check[z] || (z == v[i] && af == u[i])) continue; if (dis[z] > dis[af] + 1) { dis[z] = dis[af] + 1; trace[z] = af; q.push(z); } } } if (dis[v[i]] >= 3 && dis[v[i]] < n) { cout << v[i] << " "; int cur = v[i]; while (cur != u[i]) { cur = trace[cur]; cout << cur << " "; } return; } } cout << "no"; } } namespace subfull { int gen(int u, int v) { // if(u > v) swap(u, v); // cout << (u - 1) * n + v << "\n"; return (u - 1) * n + v; } pair<int, int> decode(int x) { int u = x / n; int v = x % n; if (v == 0) v = n; else u++; return make_pair(u, v); } bool Ed[1009][1009], vis[1000009]; int icycle = 0, vis1[1000009]; vector<ll> G[1000009]; void dfs(int x, int code) { if (icycle != 0) return; vis[x] = true; vis1[decode(x).fi] = code; // cout << x << " " << code << " " << decode(x).fi << " " << decode(x).se << "\n"; for (auto z : G[x]) { if (vis1[decode(z).fi] == code) { auto w = decode(z); icycle = w.fi; // cout << z << "\n"; // cout << w.fi << " " << w.se << " " << z << "\n"; cout << w.fi << " "; return; } dfs(z, code); if (icycle == -1) return; else if (icycle > 0) { auto w = decode(z); // cout << w.fi << " " << w.se << " " << z << "\n"; if (icycle == w.fi) icycle = -1; else cout << w.fi << " "; return; } } vis1[x] = -code; } void solve() { for (int i = 1; i <= m; i++) { Ed[u[i]][v[i]] = Ed[v[i]][u[i]] = true; if (u[i] > v[i]) swap(u[i], v[i]); } for (int i = 1; i <= m; i++) { for (auto z : adj[v[i]]) { if (Ed[u[i]][z] == false && u[i] != z) { G[gen(u[i], v[i])].push_back(gen(v[i], z)); // cout << u[i] << " " << v[i] << " || " << v[i] << " " << z << "\n"; } } swap(u[i], v[i]); for (auto z : adj[v[i]]) { if (Ed[u[i]][z] == false && u[i] != z) { G[gen(u[i], v[i])].push_back(gen(v[i], z)); // cout << u[i] << " " << v[i] << " || " << v[i] << " " << z << "\n"; } } } for (int i = 1; i <= n * n; i++) { if (vis[i]) continue; dfs(i, i); if (icycle != 0) { // if (icycle != -1) // cout << decode(i).fi << " "; return; } } cout << "no"; } } int main() { cin.tie(0)->sync_with_stdio(0); cin >> n >> m; for (int i = 1; i <= m; i++) { cin >> u[i] >> v[i]; adj[u[i]].push_back(v[i]); adj[v[i]].push_back(u[i]); } // if (n <= 100 && m <= 20000) // sub1::solve(); // else subfull::solve(); return 0; }
#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...