λ¬Έμ
λλ 2020λ , λ°±μ€μ΄λ μλλλΌμ ν κ΅λ―Όμ΄λ€. μλλλΌμλ Nκ°μ μ§μ μ΄ μκ³ Nκ°μ μ§μ μ¬μ΄μλ Mκ°μ λλ‘μ Wκ°μ μνμ΄ μλ€. (λ¨ λλ‘λ λ°©ν₯μ΄ μμΌλ©° μνμ λ°©ν₯μ΄ μλ€.) μνμ μμ μμΉμμ λμ°© μμΉλ‘ κ°λ νλμ κ²½λ‘μΈλ°, νΉμ΄νκ²λ λμ°©μ νκ² λλ©΄ μμμ νμμ λλ³΄λ€ μκ°μ΄ λ€λ‘ κ°κ² λλ€. μν λ΄μμλ μκ³κ° κ±°κΎΈλ‘ κ°λ€κ³ μκ°νμ¬λ μ’λ€.
μκ° μ¬νμ λ§€μ° μ’μνλ λ°±μ€μ΄λ ν κ°μ§ κΆκΈμ¦μ λΉ μ‘λ€. ν μ§μ μμ μΆλ°μ νμ¬μ μκ°μ¬νμ νκΈ° μμνμ¬ λ€μ μΆλ°μ νμλ μμΉλ‘ λμμμ λ, μΆλ°μ νμμ λλ³΄λ€ μκ°μ΄ λλμκ° μλ κ²½μ°κ° μλμ§ μλμ§ κΆκΈν΄μ‘λ€. μ¬λ¬λΆμ λ°±μ€μ΄λ₯Ό λμ μ΄λ° μΌμ΄ κ°λ₯νμ§ λΆκ°λ₯νμ§ κ΅¬νλ νλ‘κ·Έλ¨μ μμ±νμ¬λΌ.
μ λ ₯
첫 λ²μ§Έ μ€μλ ν μ€νΈμΌμ΄μ€μ κ°μ TC(1 ≤ TC ≤ 5)κ° μ£Όμ΄μ§λ€. κ·Έλ¦¬κ³ λ λ²μ§Έ μ€λΆν° TCκ°μ ν μ€νΈμΌμ΄μ€κ° μ°¨λ‘λ‘ μ£Όμ΄μ§λλ° κ° ν μ€νΈμΌμ΄μ€μ 첫 λ²μ§Έ μ€μλ μ§μ μ μ N(1 ≤ N ≤ 500), λλ‘μ κ°μ M(1 ≤ M ≤ 2500), μνμ κ°μ W(1 ≤ W ≤ 200)μ΄ μ£Όμ΄μ§λ€. κ·Έλ¦¬κ³ λ λ²μ§Έ μ€λΆν° M+1λ²μ§Έ μ€μ λλ‘μ μ λ³΄κ° μ£Όμ΄μ§λλ° κ° λλ‘μ μ 보λ S, E, T μΈ μ μλ‘ μ£Όμ΄μ§λ€. Sμ Eλ μ°κ²°λ μ§μ μ λ²νΈ, Tλ μ΄ λλ‘λ₯Ό ν΅ν΄ μ΄λνλλ° κ±Έλ¦¬λ μκ°μ μλ―Ένλ€. κ·Έλ¦¬κ³ M+2λ²μ§Έ μ€λΆν° M+W+1λ²μ§Έ μ€κΉμ§ μνμ μ λ³΄κ° S, E, T μΈ μ μλ‘ μ£Όμ΄μ§λλ° Sλ μμ μ§μ , Eλ λμ°© μ§μ , Tλ μ€μ΄λλ μκ°μ μλ―Ένλ€. Tλ 10,000λ³΄λ€ μκ±°λ κ°μ μμ°μ λλ 0μ΄λ€.
λ μ§μ μ μ°κ²°νλ λλ‘κ° ν κ°λ³΄λ€ λ§μ μλ μλ€. μ§μ μ λ²νΈλ 1λΆν° NκΉμ§ μμ°μλ‘ μ€λ³΅ μμ΄ λ§€κ²¨μ Έ μλ€.
μΆλ ₯
TCκ°μ μ€μ κ±Έμ³μ λ§μ½μ μκ°μ΄ μ€μ΄λ€λ©΄μ μΆλ° μμΉλ‘ λμμ€λ κ²μ΄ κ°λ₯νλ©΄ YES, λΆκ°λ₯νλ©΄ NOλ₯Ό μΆλ ₯νλ€.
λΉ¨κ° κΈμ 보면 벨λ§ν¬λ μκ³ λ¦¬μ¦μ΄λΌλ κ²μ μ μ μλ€.
μ ? ν μ§μ μμ λμμ€λ€ - Cycle, μκ°μ΄ λλμκ°λ€ - μμ
Negative Cycleμ νμ±νλ κ²μΌλ‘ 벨λ§ν¬λ μκ³ λ¦¬μ¦μ λ μ¬λ¦΄ μ μλ€.
λ²¨λ§ ν¬λ μκ³ λ¦¬μ¦μ O(VE) μ΄λ―λ‘ 500 * 2700 = 1350000, μΆ©λΆνλ€.
package com.study.algorithm.boj1865;
import java.io.*;
import java.util.*;
class Pair {
int e;
int t;
Pair(int e, int t) {
this.e = e;
this.t = t;
}
}
public class Main {
static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
static BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
static ArrayList<ArrayList<Pair>> STATIONS;
static int N, M, W;
static int INF = (int)1e8;
public static void main(String[] args) throws IOException {
StringTokenizer st = new StringTokenizer(br.readLine());
StringBuilder sb = new StringBuilder();
int tc = Integer.parseInt(st.nextToken());
while (tc-- > 0) {
input();
//inputDebug();
sb.append(bellmanFord());
}
//inputDebug();
bw.write(sb.toString());
bw.close();
br.close();
}
private static String bellmanFord() {
int dist[] = new int[N + 1];
Arrays.fill(dist, INF);
dist[1] = 0;
for (int loop = 0; loop <= N; loop++) {
for (int i = 1; i <= N; i++) {
for (Pair path : STATIONS.get(i)) {
if (dist[path.e] > dist[i] + path.t) {
if (loop == N) {
return "YES\n";
}
dist[path.e] = dist[i] + path.t;
}
}
}
}
return "NO\n";
}
private static void input() throws IOException {
StringTokenizer st = new StringTokenizer(br.readLine());
N = Integer.parseInt(st.nextToken());
M = Integer.parseInt(st.nextToken());
W = Integer.parseInt(st.nextToken());
STATIONS = new ArrayList<>();
for (int i = 0; i <= N; i++) {
STATIONS.add(new ArrayList<>());
}
int cnt = M + W;
for (int i = 0; i < cnt; i++) {
st = new StringTokenizer(br.readLine());
int s = Integer.parseInt(st.nextToken());
int e = Integer.parseInt(st.nextToken());
int t = Integer.parseInt(st.nextToken());
if (i < M) {
STATIONS.get(s).add(new Pair(e, t));
STATIONS.get(e).add(new Pair(s, t));
} else {
STATIONS.get(s).add(new Pair(e, -t));
}
}
}
/*
private static void inputDebug() {
for (int i = 0; i < STATIONS.size(); i++) {
for (Pair p : STATIONS.get(i)) {
System.out.printf("%d -> %d : %d\n", i, p.e, p.t);
}
}
}*/
}
ν¬μ€νΈ μ€ λ²¨λ§ν¬λ μκ³ λ¦¬μ¦μμ μ€λͺ ν λ΄μ©μ²λΌ Nλ²μ§Έμ μ΅λ¨κ²½λ‘κ° μ λ°μ΄νΈ λλ€λ©΄ μμ μ¬μ΄ν΄μ΄ μ‘΄μ¬νλ€κ³ μ μ μλ€λ κ²μ μ΄μ©ν΄μ ν΄κ²°νλ€.
https://dev-dot.tistory.com/entry/MST-Bellman-Ford-Algorithm
[MST] Bellman-Ford Algorithm
μ΅λ¨κ²½λ‘ μκ³ λ¦¬μ¦package com.study.datastructrue.mst;import java.util.ArrayList;import java.util.Arrays;class Pair { T node; V cost; public Pair(T node, V cost) { this.node = node; this.cost = cost; }}public class BellmanFord { static long[] dist =
dev-dot.tistory.com
'μκ³ λ¦¬μ¦ > λ°±μ€' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[BOJ 20207] λ¬λ ₯ (0) | 2025.03.31 |
---|---|
λ°±μ€ - [BOJ 22856] νΈλ¦¬ μν (0) | 2024.07.08 |
λ°±μ€ - [BOJ 3085] μ¬νκ²μ (0) | 2024.03.01 |
λ°±μ€ - [BOJ 12094] Aμ B (0) | 2024.02.29 |
λ°±μ€ - [BOJ 2109] μνκ°μ° (4) | 2024.02.29 |