$O(n^3)$
x가 y보다 먼저 일어났다면 x->y 간선을 생성한다.
x와 y사이 x->t->y와 같이 t를 경유할 수 있다면 x->y를 만든다.
이는 플로이드 알고리즘으로 $O(n^3)$ 시간에 가능하다.
#include<cstdio> int n, k, s, c[401][401], x, y; int main() { scanf("%d%d", &n, &k); while (k--) scanf("%d%d", &x, &y), c[x][y] = 1; for (int i = 1; i <= n; i++) for (int j = 1; j <= n; j++) for (int k = 1; k <= n; k++) c[j][k] |= c[j][i] & c[i][k]; scanf("%d", &s); while (s--) scanf("%d%d", &x, &y), printf("%d\n", c[y][x] - c[x][y]); return 0; }
댓글 없음 :
댓글 쓰기