Submission #730954

#TimeUsernameProblemLanguageResultExecution timeMemory
730954rainboyMonthly railway pass (LMIO18_menesinis_bilietas)C11
100 / 100
169 ms32780 KiB
#include <stdio.h> #include <stdlib.h> #include <string.h> #define N 500000 #define M 500000 int ds[N], sz[N]; int find(int i) { return ds[i] < 0 ? i : (ds[i] = find(ds[i])); } void join(int i, int j) { i = find(i); j = find(j); if (i == j) return; if (ds[i] > ds[j]) ds[i] = j, sz[j] += sz[i]; else { if (ds[i] == ds[j]) ds[i]--; ds[j] = i, sz[i] += sz[j]; } } 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 main() { static int ii[M], jj[M]; static char tt[M], used[N]; int n, m, h, i, j, o, c, k, s; scanf("%d%d", &n, &m); memset(ds, -1, n * sizeof *ds); for (i = 0; i < n; i++) sz[i] = 1; for (h = 0; h < m; h++) { static char s[2]; scanf("%d%d%s", &i, &j, s), i--, j--; ii[h] = i, jj[h] = j, tt[h] = s[0]; if (tt[h] == 'T') join(i, j); } c = 0; for (i = 0; i < n; i++) if (ds[i] < 0) { ej[i] = (int *) malloc(2 * sizeof *ej[i]); c++; } for (h = 0; h < m; h++) if (tt[h] == 'A') { i = find(ii[h]), j = find(jj[h]); if (i != j) append(i, j), append(j, i); } s = 0; for (i = 0; i < n; i++) if (ds[i] < 0) { k = 0; for (o = eo[i]; o--; ) { j = ej[i][o]; if (!used[j]) used[j] = 1, k++; } if (k == c - 1) s += sz[i]; for (o = eo[i]; o--; ) { j = ej[i][o]; used[j] = 0; } } printf("%d\n", s); return 0; }

Compilation message (stderr)

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