Submission #393147

#TimeUsernameProblemLanguageResultExecution timeMemory
393147dolphingarlicPotemkin cycle (CEOI15_indcyc)C++14
30 / 100
1131 ms576864 KiB
/* CEOI 2016 Potemkin Cycle - Let each edge (u, v) represent a node (uv) in graph H - There is an edge between (uv) and (vw) in H iff (uw) doesn't exist - This means that there are no cycles of length 3 in H - We can construct H in O(NR) time - An answer exists iff a cycle exists in H; run DFS to find a cycle */ #include <bits/stdc++.h> typedef long long ll; using namespace std; int u[200001], v[200001], adj[1001][1001]; vector<int> graph[100001]; int prv[100001], visited[100001]; void dfs(int node, int root, int parent = -1) { visited[node] = root; prv[node] = parent; for (int i : graph[node]) if (i != parent) { if (prv[i]) { if (visited[i] == root) { vector<int> edges = {i}; int curr = node; while (curr != i) { edges.push_back(curr); curr = prv[curr]; } int m = edges.size(); for (int j = 0; j < m; j++) cout << u[edges[j]] << ' '; exit(0); } } else dfs(i, root, node); } } int main() { cin.tie(0)->sync_with_stdio(0); int n, r; cin >> n >> r; for (int i = 1; i <= r; i++) { cin >> u[i] >> v[i]; u[i + r] = v[i], v[i + r] = u[i]; adj[u[i]][v[i]] = i, adj[v[i]][u[i]] = i + r; } for (int i = 1; i <= 2 * r; i++) { for (int j = 1; j <= n; j++) if (j != u[i]) { if (adj[v[i]][j] && !adj[u[i]][j]) graph[i].push_back(adj[v[i]][j]); } } for (int i = 1; i <= 2 * r; i++) if (!visited[i]) dfs(i, i); cout << "no"; 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...