This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
/* 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 time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |