Submission #134010

#TimeUsernameProblemLanguageResultExecution timeMemory
134010lycPotemkin cycle (CEOI15_indcyc)C++14
30 / 100
1079 ms2040 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; typedef long double ld; typedef pair<int, int> ii; typedef pair<int, ii> iii; typedef pair<ii, int> ri3; #define mp make_pair #define pb push_back #define fi first #define sc second #define SZ(x) (int)(x).size() #define ALL(x) begin(x), end(x) #define REP(i, n) for (int i = 0; i < n; ++i) #define FOR(i, a, b) for (int i = a; i <= b; ++i) #define RFOR(i, a, b) for (int i = a; i >= b; --i) const int MAXN = 1e3+5; const int MAXR = 1e5+5; int N, R; vector<int> al[MAXN]; vector<int> ans; bool vis[MAXN]; queue<int> q; int dist[MAXN], pa[MAXN]; void trace(int a, int b) { if (dist[a] < dist[b]) swap(a,b); while (dist[a] > dist[b]) ans.push_back(a), a = pa[a]; vector<int> ans2; while (a != b) ans.push_back(a), ans2.push_back(b), a = pa[a], b = pa[b]; ans.push_back(a); reverse(ALL(ans2)); for (auto x : ans2) ans.push_back(x); } void solve(int u) { //cout << "\t\tSOLVE " << u << endl; FOR(i,1,N) dist[i] = -1, pa[i] = -1; dist[u] = 0; q.push(u); while (!q.empty() and ans.empty()) { int u = q.front(); q.pop(); bool flag = true; for (auto v : al[u]) if (v != pa[u]) { //cout << u << " -> " << v << endl; if (~dist[v]) { flag = false; //cout << "\t\t\tTRACE " << u << " " << v << endl; trace(u,v); //cout << " \t\t\t:: "; for (auto x:ans) { cout << x << ' '; } cout << endl; if (SZ(ans) < 4) ans.clear(); else break; } } if (flag) for (auto v : al[u]) if (v != pa[u]) { if (dist[v] == -1) dist[v] = dist[u]+1, pa[v] = u, q.push(v); } } } void dfs(int u, int p) { if (!ans.empty()) return; vis[u] = 1; for (auto v : al[u]) { if (!vis[v]) dfs(v, u); else if (v != p) { solve(v); if (!ans.empty()) return; } } } int main() { //freopen("in.txt", "r", stdin); ios::sync_with_stdio(false); cin.tie(0); cin >> N >> R; FOR(i,1,R){ int A, B; cin >> A >> B; al[A].push_back(B); al[B].push_back(A); } FOR(i,1,N) vis[i] = 0; FOR(i,1,N) if (!vis[i]) { dfs(1,0); if (!ans.empty()) break; } if (ans.empty()) cout << "no" << '\n'; else FOR(i,0,SZ(ans)-1) cout << ans[i] << (i==SZ(ans)-1 ? '\n' : ' '); }
#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...