• 문제 링크
1613번: 역사
첫째 줄에 첫 줄에 사건의 개수 n(400 이하의 자연수)과 알고 있는 사건의 전후 관계의 개수 k(50,000 이하의 자연수)가 주어진다. 다음 k줄에는 전후 관계를 알고 있는 두 사건의 번호가 주어진다.
www.acmicpc.net
• 풀이 과정
• 풀이 코드
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.StringTokenizer;
public class Main {
static int n;
static int[][] arr;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st = new StringTokenizer(br.readLine());
n = Integer.parseInt(st.nextToken());
int k = Integer.parseInt(st.nextToken());
arr = new int[n + 1][n + 1];
for (int i = 0; i < k; i++) {
st = new StringTokenizer(br.readLine());
int src = Integer.parseInt(st.nextToken());
int dest = Integer.parseInt(st.nextToken());
arr[src][dest] = -1;
arr[dest][src] = 1;
}
floydWarshall();
int s = Integer.parseInt(br.readLine());
for (int i = 0; i < s; i++) {
st = new StringTokenizer(br.readLine());
bw.write(arr[Integer.parseInt(st.nextToken())][Integer.parseInt(st.nextToken())] + "\n");
}
bw.flush();
}
private static void floydWarshall() {
for (int k = 1; k <= n; k++) {
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++) {
if (arr[i][j] == 0) {
if (arr[i][k] == 1 && arr[k][j] == 1)
arr[i][j] = 1;
else if (arr[i][k] == -1 && arr[k][j] == -1)
arr[i][j] = -1;
}
}
}
}
}
}
'Problem Solving > Baekjoon' 카테고리의 다른 글
[백준] 10773 제로 - Data Structure / Java (0) | 2022.11.01 |
---|---|
[백준] 1647 도시 분할 계획 - Graph Theory / Java (0) | 2022.10.31 |
[백준] 1956 운동 - Graph Theory / Java (0) | 2022.10.29 |
[백준] 1504 특정한 최단 경로 - Graph Theory / Java (0) | 2022.10.28 |
[백준] 2616 소형기관차 - Dynamic Programming / Java (0) | 2022.10.27 |
댓글