반응형
알고리즘 종류
- 플로이드 와샬(floyd warshall)
사고 과정
- 플로이드 와샬 적용하기
구현(C++)
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
|
#include <iostream>
#include <cstring>
using namespace std;
int n, k, s;
int mat[401][401];
void floyd(){
for(int m=1; m<=n; m++){
for(int i=1; i<=n; i++){
for(int j=1; j<=n; j++){
if(mat[i][m] == mat[m][j] && mat[i][j] == 0) mat[i][j] = mat[i][m];
}
}
}
}
int main(void){
ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
memset(mat, 0, sizeof(mat));
cin >> n >> k;
// 연관된 사건 입력 받기
int a, b;
for(int i=0; i<k; i++){
cin >> a >> b;
mat[a][b] = -1;
mat[b][a] = 1;
}
floyd();
// 원하는 사건 출력
cin >> s;
for(int i=0; i<s; i++){
cin >> a >> b;
cout << mat[a][b] << "\n";
}
}
|
cs |
시행착오
- 시간초과가 났다. 도저히 몰라서 다른 사람들의 풀이를 검색해 보았다. 차이를 찾으려고 다양한 방법을 수행했다. 원인은 endl 였다. endl를 쓰면 시간초과가 발생했다. "\n"를 쓰면 시간초과가 발생하지 않았다. 물론 이런 경우는 적겠지만, 속도를 조금이라도 빠르게 하기 위해서 기억해야겠다.
반응형
'코딩 공부 > 백준' 카테고리의 다른 글
[백준]][C++] 1022 소용돌이 예쁘게 출력하기 (0) | 2021.02.23 |
---|---|
[백준][C++] 2470 두 용액 (0) | 2021.02.20 |
[백준][C++] 20327 배열 돌리기 6 (0) | 2021.02.18 |
[백준][C++] 1202 보석 도둑 (0) | 2021.02.16 |
[백준][C++] 7453 합이 0인 네 정수 (0) | 2021.02.15 |