티스토리 뷰
문제를 읽고 그림을 그려보면 플로이드 문제인게 보인다
각각 친구보다만 x-d~x+d 이기 때문에 max(두 정점사이거리)*d가 답이다
소스코드
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 | #include <iostream> #include <algorithm> #include <cstring> using namespace std; int d[55][55]; char a[55][55]; int n, k; int main() { scanf(" %d %d", &n, &k); for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { d[i][j] = 1e9; } } for (int i = 0; i < n; i++) scanf(" %s", &a[i]), d[i][i] = 0; for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { if (a[i][j] == 'Y') d[i][j] = 1; } } for (int k = 0; k < n; k++) { for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { d[i][j] = min(d[i][j], d[i][k] + d[k][j]); } } } int ans = 0; for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { ans = max(ans, d[i][j]); } } if (ans == 1e9) puts("-1"); else printf("%d\n", ans*k); } | cs |
'알고리즘 > BOJ' 카테고리의 다른 글
[백준] 1837 암호제작 (0) | 2018.07.30 |
---|---|
[백준] 12908 텔레포트 3 (0) | 2018.07.23 |
[백준] 12914 곰을 위한 레스토랑 (0) | 2018.07.23 |
[백준] 12896 스크루지 민호 (0) | 2018.07.22 |
[백준] 12892 생일 선물 (0) | 2018.07.22 |
댓글