Submission #544769

#TimeUsernameProblemLanguageResultExecution timeMemory
544769rainboyInformation (CEOI08_information)C11
100 / 100
614 ms23004 KiB
/* http://i.stanford.edu/pub/cstr/reports/cs/tr/74/455/CS-TR-74-455.pdf */ #include <stdio.h> #include <stdlib.h> #include <string.h> #define N 2000 #define M 1000000 int ii[M], jj[M]; char cc[M]; int *eh[N], eo[N]; char visited[N]; int hh1[N - 1], hh2[N - 1], cnt1, cnt2; void append(int i, int h) { int o = eo[i]++; if (o >= 2 && (o & o - 1) == 0) eh[i] = (int *) realloc(eh[i], o * 2 * sizeof *eh[i]); eh[i][o] = h; } int ta[N], time; void dfs1(int i) { int o; ta[i] = ++time; for (o = eo[i]; o--; ) { int h = eh[i][o], j = jj[h]; if (!cc[h] && !ta[j]) cc[h] = 1, hh1[cnt1++] = h, dfs1(j); } } void dfs2(int i) { int o; visited[i] = 1; for (o = eo[i]; o--; ) { int h = eh[i][o], j = jj[h]; if (!cc[h] && !visited[j]) cc[h] = 2, hh2[cnt2++] = h, dfs2(j); } } int main() { int n, m, h, i, j; scanf("%d%d", &n, &m); for (i = 0; i < n; i++) eh[i] = (int *) malloc(2 * sizeof *eh[i]); for (h = 0; h < m; h++) { scanf("%d%d", &i, &j), i--, j--; ii[h] = i, jj[h] = j; append(i, h); } while (1) { int done, h_; memset(ta, 0, n * sizeof *ta), time = 0; cnt1 = 0; dfs1(0); for (i = 0; i < n; i++) if (!ta[i]) { printf("NONE\n"); return 0; } memset(visited, 0, n * sizeof *visited); for (h = 0; h < cnt2; h++) cc[hh2[h]] = 0; cnt2 = 0; dfs2(0); done = 1; for (i = 0; i < n; i++) if (!visited[i]) { done = 0; break; } if (done) break; h_ = -1; for (h = 0; h < cnt1; h++) { int h1 = hh1[h]; if (visited[ii[h1]] && !visited[jj[h1]]) if (h_ == -1 || ta[ii[h_]] < ta[ii[h1]]) h_ = h1; cc[h1] = 0; } cc[h_] = 2, hh2[cnt2++] = h_; } for (h = 0; h < cnt1; h++) printf("%d ", hh1[h] + 1); printf("\n"); for (h = 0; h < cnt2; h++) printf("%d ", hh2[h] + 1); printf("\n"); return 0; }

Compilation message (stderr)

information.c: In function 'append':
information.c:16:23: warning: suggest parentheses around '-' in operand of '&' [-Wparentheses]
   16 |  if (o >= 2 && (o & o - 1) == 0)
      |                     ~~^~~
information.c: In function 'main':
information.c:50:2: warning: ignoring return value of 'scanf' declared with attribute 'warn_unused_result' [-Wunused-result]
   50 |  scanf("%d%d", &n, &m);
      |  ^~~~~~~~~~~~~~~~~~~~~
information.c:54:3: warning: ignoring return value of 'scanf' declared with attribute 'warn_unused_result' [-Wunused-result]
   54 |   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...
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...