반응형
12-24 00:25
- Today
- Total
Link
개발하는 고라니
[백준] 10159번 : 저울 본문
반응형
[Floyd Warshall (플로이드 와샬)]
일반적인 플로이드 와샬 알고리즘으로 모든 정점에서 다른 모든 정점으로의 최단 거리를 구한다. 이 때 가볍고 무겁다는 것은 양방향이 아닌 단방향이다.
그러므로 a정점에서 b정점에 대하여 어느 것이 가볍고 무거운지 모르고, 마찬가지로 b정점에서 a정점에 대하여 어느 것이 가볍고 무거운지 모른다면 (distance[a][b] == INF && distance[b][a] == INF) 비교 결과를 알 수 없는 것이다.
플로이드 와샬 알고리즘을 사용했으므로 시간 복잡도는 O(n^3)이 될 것 이다.
# Code </>
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
static final int INF = 1000000000;
static int[][] d = new int[101][101];
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
int m = Integer.parseInt(br.readLine());
for(int i=1; i<=n; i++)
for(int j=1; j<=n; j++)
d[i][j] = (i != j) ? INF : 0;
for(int i=0; i<m; i++){
StringTokenizer st = new StringTokenizer(br.readLine());
int heavy = Integer.parseInt(st.nextToken());
int light = Integer.parseInt(st.nextToken());
d[heavy][light] = 1;
}
for(int k=1; k<=n; k++)
for(int i=1; i<=n; i++)
for(int j=1; j<=n; j++)
d[i][j] = Math.min(d[i][j], d[i][k] + d[k][j]);
for(int i=1; i<=n; i++) {
int cnt = 0;
for (int j = 1; j <= n; j++)
if(d[i][j] == INF && d[j][i] == INF)
cnt++;
System.out.println(cnt);
}
}
}
반응형
'Programming > 백준' 카테고리의 다른 글
[백준] 1507번 : 궁금한 민호 (0) | 2021.03.06 |
---|---|
[백준] 1486번 : 등산 (0) | 2021.03.06 |
[백준] 16398번 : 행성 연결 (0) | 2021.03.06 |
[백준] 2660번 : 회장뽑기 (0) | 2021.03.04 |
[백준] 2458번 : 키 순서 (0) | 2021.03.03 |
Comments