Submission #545889

#TimeUsernameProblemLanguageResultExecution timeMemory
545889rainboyPotemkin cycle (CEOI15_indcyc)C11
100 / 100
361 ms2516 KiB
#include <stdio.h> #include <stdlib.h> #include <string.h> #define N 1000 int *ej[N], eo[N]; void append(int i, int j) { int o = eo[i]++; if (o >= 2 && (o & o - 1) == 0) ej[i] = (int *) realloc(ej[i], o * 2 * sizeof *ej[i]); ej[i][o] = j; } int qu[N], cc[N], cnt; char adj[N]; void dfs(int i, int c) { int o; if (cc[i] == c) return; cc[i] = c; if (adj[i]) { qu[cnt++] = i; return; } for (o = eo[i]; o--; ) { int j = ej[i][o]; dfs(j, c); } } int bfs(int n, int s, int t, int c) { static int dd[N], pp[N]; int i, head, cnt; for (i = 0; i < n; i++) dd[i] = n; head = cnt = 0; dd[s] = 0, pp[s] = -1, qu[head + cnt++] = s; while (cnt) { int d, o; i = qu[cnt--, head++], d = dd[i] + 1; for (o = eo[i]; o--; ) { int j = ej[i][o]; if (cc[j] == c && (!adj[j] || j == t) && dd[j] > d) { dd[j] = d, pp[j] = i, qu[head + cnt++] = j; if (j == t) { cnt = 0; while (j != -1) qu[cnt++] = j, j = pp[j]; return cnt; } } } } return -1; } int main() { static char aa[N][N]; int n, m, h, h_, i, j; scanf("%d%d", &n, &m); for (i = 0; i < n; i++) ej[i] = (int *) malloc(2 * sizeof *ej[i]); while (m--) { scanf("%d%d", &i, &j), i--, j--; aa[i][j] = aa[j][i] = 1; append(i, j), append(j, i); } for (i = 0; i < n; i++) { int o; memset(adj, 0, n * sizeof *adj); for (o = eo[i]; o--; ) { int j = ej[i][o]; adj[j] = 1; } memset(cc, -1, n * sizeof *cc); for (j = 0; j < n; j++) if (j != i && !adj[j] && cc[j] == -1) { cnt = 0; dfs(j, j); for (h = 0; h < cnt; h++) for (h_ = h + 1; h_ < cnt; h_++) if (!aa[qu[h]][qu[h_]]) { cnt = bfs(n, qu[h], qu[h_], j); while (cnt--) printf("%d ", qu[cnt] + 1); printf("%d\n", i + 1); return 0; } } } printf("no\n"); return 0; }

Compilation message (stderr)

indcyc.c: In function 'append':
indcyc.c:12:23: warning: suggest parentheses around '-' in operand of '&' [-Wparentheses]
   12 |  if (o >= 2 && (o & o - 1) == 0)
      |                     ~~^~~
indcyc.c: In function 'main':
indcyc.c:69:2: warning: ignoring return value of 'scanf' declared with attribute 'warn_unused_result' [-Wunused-result]
   69 |  scanf("%d%d", &n, &m);
      |  ^~~~~~~~~~~~~~~~~~~~~
indcyc.c:73:3: warning: ignoring return value of 'scanf' declared with attribute 'warn_unused_result' [-Wunused-result]
   73 |   scanf("%d%d", &i, &j), i--, j--;
      |   ^~~~~~~~~~~~~~~~~~~~~
#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...