티스토리 뷰
출처 : https://www.acmicpc.net/problem/1613
"플로이드와샬!"
사건의 전후 관계에 대해 묻고 있다. 플로이드와샬은 음수 가중치를 계산할 수 있다는 점이 다익스트라와 다르다. 문제에서 친절히 -1,0,1 과 같이 힌트를 주었다. 주어지는 사건 x,y 에 대해 1 과 -1 을 부여한다. x y 순으로 주어진다면 아래와 같다.
map[x][y] = 1 ;map[y][x] = -1;
그렇 다면 x y 두 사건의 관계를 x < y 라고 하자. 이렇게 되면 이제 우리가 찾아야 할 것은 x < (...) < y 의 관계를 만족하는 다른 사건들과의 관계 이다.
이를 아래와 같이 계산한다. 가장 바깥쪽 for문이 우리가 찾을 (...) 에 해당한다.
for (int a = 1; a <= n; a++) {
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++) {
if(map[i][a] == 0 || map[i][a] != map[a][j])
continue;
map[i][j] = map[i][a];
}
}
}
위에 소스는 다음과 같은 의미이다.
i < a 이고 i < a && a < j 라면, 당연히 i < j 가 성립한다.
i > a 이고 i > a && a > j 라면, 당연히 i > j 가 성립한다.
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 | import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.StringTokenizer; class Main { static int n,k,s; static int[][] map; static int[] p; static StringBuffer sb = new StringBuffer(); public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st = new StringTokenizer(br.readLine()); n =Integer.parseInt(st.nextToken()); k =Integer.parseInt(st.nextToken()); map = new int[n+1][n+1]; for (int i = 0; i < k; i++) { st = new StringTokenizer(br.readLine()); int a = Integer.parseInt(st.nextToken()); int b = Integer.parseInt(st.nextToken()); map[a][b] = -1; map[b][a] = 1; } for (int a = 1; a <= n; a++) { for (int i = 1; i <= n; i++) { for (int j = 1; j <= n; j++) { if(map[i][a] == 0 || map[i][a] != map[a][j]) continue; map[i][j] = map[i][a]; } } } s = Integer.parseInt(br.readLine()); for (int i = 0; i < s; i++) { st = new StringTokenizer(br.readLine()); int a = Integer.parseInt(st.nextToken()); int b = Integer.parseInt(st.nextToken()); sb.append(map[a][b]+"\n"); } System.out.println(sb); } } | cs |
'Study > 알고리즘 문제풀이' 카테고리의 다른 글
백준 1953. 팀배분 :: 돼지개발자 (0) | 2018.11.06 |
---|---|
백준 3187. 양치기 꿍 :: 돼지개발자 (0) | 2018.11.06 |
백준 5566. 주사위 게임 :: 돼지개발자 (0) | 2018.11.05 |
백준 3048. 개미 :: 돼지개발자 (0) | 2018.11.05 |
SWEA 1859. 백만 장자 프로젝트 :: 돼지개발자 (0) | 2018.11.05 |
댓글
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday