diff --git "a/LiiNi-coder/202509/01 BOJ \354\233\234\355\231\200.md" "b/LiiNi-coder/202509/01 BOJ \354\233\234\355\231\200.md" new file mode 100644 index 00000000..fc4c134a --- /dev/null +++ "b/LiiNi-coder/202509/01 BOJ \354\233\234\355\231\200.md" @@ -0,0 +1,83 @@ +```java +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.util.ArrayList; +import java.util.StringTokenizer; + +public class Main { + private static BufferedReader br; + private static StringBuilder sb; + private static StringTokenizer st; + private static int n; + private static int m; + private static int w; + private static class Edge { + int from; + int to; + int weight; + public Edge(int from, int to, int weight) { + this.from = from; + this.to = to; + this.weight = weight; + } + } + + private static ArrayList edges; + + public static void main(String[] args) throws IOException { + br = new BufferedReader(new InputStreamReader(System.in)); + sb = new StringBuilder(); + + int tc = Integer.parseInt(br.readLine()); + while (tc-- > 0) { + st = new StringTokenizer(br.readLine()); + n = Integer.parseInt(st.nextToken()); + m = Integer.parseInt(st.nextToken()); + w = Integer.parseInt(st.nextToken()); + + edges = new ArrayList<>(); + for (int i = 0; i < m; i++) { + st = new StringTokenizer(br.readLine()); + int s = Integer.parseInt(st.nextToken()); + int e = Integer.parseInt(st.nextToken()); + int t = Integer.parseInt(st.nextToken()); + edges.add(new Edge(s, e, t)); + edges.add(new Edge(e, s, t)); + } + + for (int i = 0; i < w; i++) { + st = new StringTokenizer(br.readLine()); + int s = Integer.parseInt(st.nextToken()); + int e = Integer.parseInt(st.nextToken()); + int t = Integer.parseInt(st.nextToken()); + edges.add(new Edge(s, e, -t)); + } + if (bellmanFord()) { + sb.append("YES\n"); + } else { + sb.append("NO\n"); + } + } + + System.out.print(sb.toString()); + } + + private static boolean bellmanFord() { + int[] dist = new int[n + 1]; + for (int i = 1; i < n; i++) { + for (Edge edge : edges) { + if (dist[edge.to] > dist[edge.from] + edge.weight) { + dist[edge.to] = dist[edge.from] + edge.weight; + } + } + } + for (Edge edge : edges) { + if (dist[edge.to] > dist[edge.from] + edge.weight) { + return true; + } + } + return false; + } +} +```