Submission #494170

#TimeUsernameProblemLanguageResultExecution timeMemory
494170rainboyNewspapers (CEOI21_newspapers)C11
100 / 100
1 ms332 KiB
/* https://csacademy.com/contest/archive/task/catch-the-thief */ #include <stdio.h> #include <stdlib.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 pp[N], i_, d_; void dfs1(int p, int i, int d) { int o; pp[i] = p; if (d_ < d) i_ = i, d_ = d; for (o = eo[i]; o--; ) { int j = ej[i][o]; if (j != p) dfs1(i, j, d + 1); } } char path[N]; int dfs2(int p, int i, int d) { int o; if (d >= 3) return 0; for (o = eo[i]; o--; ) { int j = ej[i][o]; if (j != p && !path[j] && !dfs2(i, j, d + 1)) return 0; } return 1; } int main() { static int qu[N], qu_[N * 5]; int n, m, h, i, j, u, v, o, cnt; scanf("%d%d", &n, &m); if (m != n - 1) { printf("NO\n"); return 0; } if (n == 1) { printf("YES\n"); printf("1\n"); printf("1\n"); return 0; } if (n == 2) { printf("YES\n"); printf("2\n"); printf("1 1\n"); return 0; } for (i = 0; i < n; i++) ej[i] = (int *) malloc(2 * sizeof *ej[i]); for (h = 0; h < m; h++) { scanf("%d%d", &i, &j), i--, j--; append(i, j), append(j, i); } i_ = -1, d_ = -1; dfs1(-1, 0, 0); u = i_; i_ = -1, d_ = -1; dfs1(-1, u, 0); v = i_; for (h = d_, i = v; h >= 0; h--, i = pp[i]) path[qu[h] = i] = 1; path[u] = path[v] = 0; for (h = 1; h < d_; h++) if (!dfs2(-1, qu[h], 0)) { printf("NO\n"); return 0; } cnt = 0; for (h = 1; h < d_; h++) { i = qu[h]; for (o = 0; o < eo[i]; o++) { j = ej[i][o]; if (!path[j] && eo[j] >= 2) qu_[cnt++] = i, qu_[cnt++] = j; } qu_[cnt++] = i; } printf("YES\n"); printf("%d\n", cnt * 2); for (h = 0; h < cnt; h++) printf("%d ", qu_[h] + 1); for (h = cnt - 1; h >= 0; h--) printf("%d ", qu_[h] + 1); printf("\n"); return 0; }

Compilation message (stderr)

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