문제 링크 : https://www.acmicpc.net/problem/1613
문제 설명
1. 각 사건을 번호로 표시하고 사건의 순서가 주어진다.
2. 순서를 입력후 전후 관계를 알고 싶은 사건이 입력되었을때 앞에 있는 번호의 사건이 먼저 일어났으면 -1,
뒤에 있는 번호의 사건이 먼저 일어났으면 1, 어떤지 모르면 0을 출력.
알고리즘
1. 배열에 순서관계를 입력 받을 때 a , b순으로 입력받을경우 map[a][b]=-1 ,map[b][a]=1 로 초기화 한다.
2. 플루이드 알고리즘으로 순서관계를 정리한다.
3. 전후 관계를 알고싶은 곳의 배열 값을 출력한다.
코드
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 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 | #include<iostream> #include<algorithm> using namespace std; int map[401][401]; int N, M; int main() { cin.tie(NULL); ios::sync_with_stdio(false); cin >> N >> M; //배열 초기화 for (int i = 0; i < N; i++) { for (int j = 0; j < N; j++) { map[i][j] = 0; } } for (int i = 0; i <M; i++) { int a, b; cin >> a >> b; map[a-1][b-1] = -1; map[b-1][a-1] = 1; } //플루이드 알고리즘 for(int k=0;k<N;k++){ for (int i = 0; i < N; i++) { for (int j = 0; j < N; j++) { if (i == j)continue; if (map[i][j] == 0) { if (map[i][k] == 1 && map[k][j] == 1) { map[i][j] = 1; } else if (map[i][k] == -1 && map[k][j] == -1) { map[i][j] = -1; } } } } } int k; cin >> k; for (int i = 0; i < k; i++) { int a, b; cin >> a >> b; cout << map[a - 1][b - 1]<<"\n"; } } | cs |
'c++ > 백준' 카테고리의 다른 글
백준 11404 번 : 플로이드 (0) | 2020.04.29 |
---|---|
백준 3015번 : 오아시스 재결합 (0) | 2020.04.29 |
백준 1722번 : 순열의 순서 (0) | 2020.04.29 |
백준 9205번: 맥주마시면서 걸어가기 (0) | 2020.04.29 |
백준 2293번 : 동전 1 (0) | 2020.04.29 |