Submission #53897

#TimeUsernameProblemLanguageResultExecution timeMemory
53897paulicaPotemkin cycle (CEOI15_indcyc)C++14
90 / 100
97 ms6220 KiB
#include <bits/stdc++.h> using namespace std; #define _ << " _ " << #define TRACE(x) cout << #x << " = " << x << endl #define fi first #define se second typedef pair<int, int> pii; const int MaxN = 1010, MaxR = 1e5 + 10; int n, r; vector<pii> e[MaxN]; bool con[MaxN][MaxN]; pii edg[MaxR]; bool vis[MaxR], stk[MaxR]; //int pre[MaxR]; vector<int> path; void dfs(int x, int y, int id) { vis[id] = true; stk[id] = true; path.push_back(y); for (pii z : e[y]) { if (!con[x][z.fi] && z.fi != x) { if (!vis[z.se]) { //pre[z.se] = id; dfs(y, z.fi, z.se); } else if (stk[z.se]) { vector<int> cyc; // TRACE("Yay"); int pos[MaxN]; for (int i = 0; i < MaxN; i++) pos[i] = -1; for (int i = path.size() - 1; i >= 0; i--) { if (pos[path[i]] != -1) { // TRACE(pos[path[i]] _ i); // copy(path.begin() + pos[path[i]], path.begin() + i, cyc.begin()); //cyc = vector(path.begin() + pos[path[i]], path.begin() + i); for (int j = pos[path[i]]; j > i; j--) cyc.push_back(path[j]); break; } pos[path[i]] = i; } //for (int i : cyc) TRACE(i); //exit(0); for (int i = 0; i + 1 < cyc.size(); i++) assert(con[cyc[i]][cyc[i+1]]); assert(con[cyc[0]][cyc.back()]); // exit(0); int m = cyc.size(); for (int len = 3; len < m; len++) for (int i = 0; i < m; i++) { if (con[cyc[i]][cyc[(i + len) % m]]) { for (int j = (i + 1) % m; j != i; j = (j + 1) % m) cout << cyc[j] << " "; cout << cyc[i]; exit(0); } } } } } stk[id] = false; path.pop_back(); } int main() { ios_base::sync_with_stdio(false); cin.tie(0); cin >> n >> r; for (int i = 0; i < r; i++) { int x, y; cin >> x >> y; e[x].push_back({y, i}); e[y].push_back({x, i}); con[x][y] = con[y][x] = true; edg[i] = {x, y}; } for (int i = 0; i < r; i++) { if (!vis[i]) { path.push_back(edg[i].fi); dfs(edg[i].fi, edg[i].se, i); path.pop_back(); } } cout << "no"; return 0; }

Compilation message (stderr)

indcyc.cpp: In function 'void dfs(int, int, int)':
indcyc.cpp:51:39: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
                 for (int i = 0; i + 1 < cyc.size(); i++) 
                                 ~~~~~~^~~~~~~~~~~~
#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...