반응형
https://www.acmicpc.net/problem/11562
11562번: 백양로 브레이크
서울 소재 Y모 대학교에서 대규모 공사를 진행하면서, 학교가 마치 미로처럼 변해버리고 말았다. 공사 이전까지는 어떤 건물에서 출발하더라도 다른 모든 건물로 갈 수 있는 길이 있었으나, 공
www.acmicpc.net
[ 문제풀이 ]
이 문제를 풀기 전에 다음 글을 먼저 읽고 오시는 것을 추천드립니다.
https://rudalsd.tistory.com/24
[ 알고리즘 ] 플로이드 와샬 알고리즘(Floyd Warshall Algorithm)
오늘 설명할 알고리즘은 플로이드 와샬 알고리즘(Floyd Warshall Algorithm)입니다. 이 알고리즘은 dijkstra와 비슷하게 각 정점까지 가는 최단 거리를 알아낼 수 있습니다. 플로이드 와샬 알고리즘이 dijk
rudalsd.tistory.com
1. arr[ N ][ N ] 배열을 만들어 양방향 도로라면 1, 아니라면 -1로 초기화합니다.
2. 플로이드 와샬 알고리즘을 통해 단방향 도로의 개수를 세서 arr 배열을 갱신해 줍니다.
3. arr[ s ][ e ]가 0보다 작다면 -arr[ s ][ e ]를 출력하고, 0보다 크다면 0을 출력합니다.
[ 소스코드 ]
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 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 | #include<iostream> using namespace std; int n, m; int arr[251][251]; int main() { scanf("%d %d", &n, &m); for (int i = 1; i <= n; i++) { arr[i][i] = 1; } for (int i = 0; i < m; i++) { int u, v, b; scanf("%d %d %d", &u, &v, &b); if (b == 0) { arr[u][v] = 1; arr[v][u] = -1; } else { arr[u][v] = arr[v][u] = 1; } } for (int i = 1; i <= n; i++) { for (int j = 1; j <= n; j++) { for (int k = 1; k <= n; k++) { if (arr[j][i] != 0 && arr[i][k] != 0) { if (arr[j][i] > 0 && arr[i][k] > 0) { arr[j][k] = 1; } else if (arr[j][i] < 0 && arr[i][k] < 0) { if (arr[j][k] != 0) { arr[j][k] = max(arr[j][k], arr[j][i] + arr[i][k]); } else { arr[j][k] = arr[j][i] + arr[i][k]; } } else if (arr[j][i] < 0) { if (arr[j][k] != 0) { arr[j][k] = max(arr[j][k], arr[j][i]); } else { arr[j][k] = arr[j][i]; } } else if (arr[i][k] < 0) { if (arr[j][k] != 0) { arr[j][k] = max(arr[j][k], arr[i][k]); } else { arr[j][k] = arr[i][k]; } } } } } } int k; scanf("%d", &k); for (int i = 0; i < k; i++) { int s, e; scanf("%d %d", &s, &e); if (arr[s][e] > 0) { printf("0\n"); } else { printf("%d\n", -arr[s][e]); } } } | cs |
반응형
'백준' 카테고리의 다른 글
[ 백준 ] 11000번 - 강의실 배정 (C++) (0) | 2023.04.22 |
---|---|
[ 백준 ] 20311번 - 화학 실험 (C++) (0) | 2023.04.21 |
[ 백준 ] 2032번 - 신기한 소수 (C++) (0) | 2023.04.19 |
[ 백준 ] 2602번 - 돌다리 건너기 (C++) (0) | 2023.04.18 |
[ 백준 ] 1507번 - 궁금한 민호 (C++) (0) | 2023.04.17 |