Skip to content

Commit 4daa163

Browse files
authored
Merge pull request #1695 from AlgorithmWithGod/Ukj0ng
[20251217] BOJ / G4 / 타임머신 / 한종욱
2 parents ea6e7df + 93524f9 commit 4daa163

File tree

1 file changed

+67
-0
lines changed

1 file changed

+67
-0
lines changed
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
```
2+
import java.io.*;
3+
import java.util.*;
4+
5+
public class Main {
6+
private static final BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
7+
private static final BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
8+
private static final long INF = (long)3e10 + 5;
9+
private static List<int[]> edges;
10+
private static long[] dist;
11+
private static int N, M;
12+
13+
public static void main(String[] args) throws IOException {
14+
init();
15+
boolean result = bellmanFord();
16+
17+
if (result) bw.write(-1 + "\n");
18+
else {
19+
for (int i = 2; i <= N; i++) {
20+
if (dist[i] != INF) bw.write(dist[i] + "\n");
21+
else bw.write(-1 + "\n");
22+
}
23+
}
24+
bw.flush();
25+
bw.close();
26+
br.close();
27+
}
28+
29+
private static void init() throws IOException {
30+
StringTokenizer st = new StringTokenizer(br.readLine());
31+
32+
N = Integer.parseInt(st.nextToken());
33+
M = Integer.parseInt(st.nextToken());
34+
edges = new ArrayList<>();
35+
dist = new long[N+1];
36+
37+
for (int i = 0; i < M; i++) {
38+
st = new StringTokenizer(br.readLine());
39+
int A = Integer.parseInt(st.nextToken());
40+
int B = Integer.parseInt(st.nextToken());
41+
int C = Integer.parseInt(st.nextToken());
42+
edges.add(new int[]{A, B, C});
43+
}
44+
}
45+
46+
private static boolean bellmanFord() {
47+
Arrays.fill(dist, INF);
48+
dist[1] = 0;
49+
50+
for (int i = 0; i < N-1; i++) {
51+
for (int[] edge : edges) {
52+
if (dist[edge[0]] != INF && dist[edge[1]] > dist[edge[0]] + edge[2]) {
53+
dist[edge[1]] = dist[edge[0]] + edge[2];
54+
}
55+
}
56+
}
57+
58+
for (int[] edge : edges) {
59+
if (dist[edge[0]] != INF && dist[edge[1]] > dist[edge[0]] + edge[2]) {
60+
return true;
61+
}
62+
}
63+
64+
return false;
65+
}
66+
}
67+
```

0 commit comments

Comments
 (0)