Hoon222y

[BOJ 1613] 역사 본문

코딩/BOJ & 알고스팟

[BOJ 1613] 역사

hoon222y 2017. 3. 28. 15:46

https://www.acmicpc.net/problem/1613


일의 우선순위를 물어보는 역사시간 문제이다 ㅋㅋ 처음 문제를 보고 접근방법으로 위상정렬로 하려고 했는데 .... 이게 왠건 플로이드 워셜이네 ....

(어떤부분을 보고 플로이드 워셜로 접근하는 사람들이 있는지 궁금하긴 하다)


일단 플로이드로 구현하게 된다면 각각의 가중치를 두고 플로이드를 돌린 후 일정 조건에 따라 다르게 출력해주면 된다. 


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#include <iostream>
#include <cstdio>
#include <cstring>
#define  INF 1000000000
using namespace std;
 
int n,m,arr[411][411],t;
int a,b;
int main(){
    scanf("%d%d" , &n,&m);
    for(int i=1;i<=n;i++){
        for(int j=1;j<=n;j++){
            arr[i][j] = INF;
        }
    }
    for(int i=1;i<=m;i++){
        scanf("%d%d" , &a,&b);
        arr[a][b] = 1;
    }
    for(int k=1;k<=n;k++){
        for(int i=1;i<=n;i++){
            for(int j=1;j<=n;j++){
                arr[i][j] = min(arr[i][j] , arr[i][k]+arr[k][j]);
            }
        }
    }
    scanf("%d" , &t);
    while(t--){
        scanf("%d%d" , &a,&b);
        if(arr[a][b] == INF && arr[b][a] == INF){
            printf("0\n");
        }else if(arr[a][b] != INF&& arr[a][b] > 0){
            printf("-1\n");
        }else {
            printf("1\n");
        }
    }
    return 0;
}
cs


'코딩 > BOJ & 알고스팟' 카테고리의 다른 글

[BOJ 13460] 째로탈출2  (0) 2017.04.11
[BOJ 2206] 벽 부수고 이동하기  (1) 2017.04.07
[BOJ 1201] NMK  (1) 2017.03.06
[BOJ 2293,2294] 동전 1,2  (0) 2017.03.04
[BOJ 1509] 팰린드롬 분할  (3) 2017.03.04
Comments