Submission #24672

#TimeUsernameProblemLanguageResultExecution timeMemory
24672BruteforcemanPotemkin cycle (CEOI15_indcyc)C++11
70 / 100
1000 ms8328 KiB
#include "bits/stdc++.h" using namespace std; int n, m; vector <int> g[1005]; bool vis[1005]; int par[1005]; vector <int> l, r; bool del[100010]; bool bad[100010]; int mat[1005][1005]; vector <int> path (int c, int b) { for(int i = 0; i < m; i++) { if(bad[l[i]] && bad[r[i]]) continue; if(l[i] == c || r[i] == c || l[i] == b || r[i] == b) { del[i] = false; } } memset(vis, false, sizeof vis); memset(par, false, sizeof par); queue <int> q; q.push(b); vis[b] = true; par[b] = -1; while(not q.empty()) { int x = q.front(); q.pop(); for(int i : g[x]) { int y = l[i] ^ r[i] ^ x; if(vis[y] == false && del[i] == false) { par[y] = x; vis[y] = true; q.push(y); } } } vector <int> ans; int cur = c; while(cur != -1) { ans.push_back(cur); cur = par[cur]; } return ans; } vector <int> bad_nodes; void dfs(int x) { vis[x] = true; for(auto i : g[x]) { int y = l[i] ^ r[i] ^ x; if(bad[y] == true) { bad_nodes.push_back(y); } if(vis[y] == false && del[i] == false) { dfs(y); } } } void check(int root) { memset(vis, false, sizeof vis); memset(del, false, sizeof del); memset(bad, false, sizeof bad); bad[root] = true; for(auto i : g[root]) { bad[l[i] ^ r[i] ^ root] = true; } for(int i = 0; i < m; i++) { if(bad[l[i]] || bad[r[i]]) { del[i] = true; } } for(int i = 1; i <= n; i++) { if(vis[i] == false && bad[i] == false) { bad_nodes.clear(); dfs(i); bool good = false; int p = -1; int q = -1; for(auto j : bad_nodes) { for(auto k : bad_nodes) { if(mat[j][k] == 0 && k != j) { p = j; q = k; good = true; goto here; } } } here: if(good) { vector <int> ans = path(p, q); for(auto j : ans) { printf("%d ", j); } printf("%d\n", root); exit(0); } } } } int main(int argc, char const *argv[]) { scanf("%d %d", &n, &m); for(int i = 0; i < m; i++) { int p, q; scanf("%d %d", &p, &q); g[p].push_back(i); g[q].push_back(i); l.push_back(p); r.push_back(q); mat[p][q] = mat[q][p] = 1; } for(int i = 1; i <= n; i++) { check(i); } printf("no\n"); return 0; }

Compilation message (stderr)

indcyc.cpp: In function 'int main(int, const char**)':
indcyc.cpp:111:24: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  scanf("%d %d", &n, &m);
                        ^
indcyc.cpp:114:25: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   scanf("%d %d", &p, &q);
                         ^
#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...