[적용한 알고리즘]

플로이드-와샬

 

[아이디어]

x->y 로 가는 경로가 있는가?

y->x 로 가는 경로가 있는가?

둘 다 없는가? 

 

를 알아보면 되겠다.

 

 

<코드>

#include <cstdio>
#include <algorithm>
using namespace std;
const int MAX_N = 401;

bool dist[MAX_N][MAX_N];
int main(){
    int N, K;
    scanf("%d %d", &N, &K);

    for (int i = 0; i < K; i++){
        int first, second;
        scanf("%d %d", &first, &second);
        dist[first][second] = true;
    }

    for (int k = 1; k <= N; k++){
        for (int i = 1; i <= N; i++){
            for (int j = 1; j <= N; j++){
                if (dist[i][k] && dist[k][j]){
                    dist[i][j] = true;
                }
            }
        }
    }

    int Q;
    scanf("%d", &Q);

    while (Q--){
        int x, y;
        scanf("%d %d", &x, &y);
        if (dist[x][y]) printf("-1\n");
        else if (dist[y][x]) printf("1\n");
        else printf("0\n");
    }
    return 0;
}

'Algorithm > BOJ' 카테고리의 다른 글

[백준] 2099번 The game of death  (0) 2020.02.03
[백준] 1647번 도시 분할 계획  (0) 2020.02.03
[백준] 1854번 K번째 최단경로 찾기  (0) 2020.02.01
[백준] 1507번 궁금한 민호  (0) 2020.02.01
[백준] 1956번 운동  (0) 2020.02.01

+ Recent posts