- Today
- Total
- database
- 그리λ
- μμμ λ ¬
- spring
- μλ°
- μλ£κ΅¬μ‘°
- tree
- μ‘Έμ μν
- array
- pytorch
- OOP
- μΈν΄
- CS
- λ°μ΄ν°λ² μ΄μ€
- 벨λ§ν¬λ
- λ€μ΅μ€νΈλΌ
- μλ°μμ μ
- λ°±μλ
- ꡬν
- BFS
- leetcode
- νλ‘κ·Έλλ¨Έμ€
- MST
- λ¬Έλ²
- java
- λ°±μ€
- dp
- Graph
- Algorithm
- PS
Partially Committed
[λ°±μ€ 11657] νμλ¨Έμ (JAVA) λ³Έλ¬Έ
λ¬Έμ
https://www.acmicpc.net/problem/11657
Nκ°μ λμκ° μλ€. κ·Έλ¦¬κ³ ν λμμμ μΆλ°νμ¬ λ€λ₯Έ λμμ λμ°©νλ λ²μ€κ° Mκ° μλ€. κ° λ²μ€λ A, B, Cλ‘ λνλΌ μ μλλ°, Aλ μμλμ, Bλ λμ°©λμ, Cλ λ²μ€λ₯Ό νκ³ μ΄λνλλ° κ±Έλ¦¬λ μκ°μ΄λ€. μκ° Cκ° μμκ° μλ κ²½μ°κ° μλ€. C = 0μΈ κ²½μ°λ μκ° μ΄λμ νλ κ²½μ°, C < 0μΈ κ²½μ°λ νμλ¨Έμ μΌλ‘ μκ°μ λλμκ°λ κ²½μ°μ΄λ€.
1λ² λμμμ μΆλ°ν΄μ λλ¨Έμ§ λμλ‘ κ°λ κ°μ₯ λΉ λ₯Έ μκ°μ ꡬνλ νλ‘κ·Έλ¨μ μμ±νμμ€.
μ λ ₯
첫째 μ€μ λμμ κ°μ N (1 ≤ N ≤ 500), λ²μ€ λ Έμ μ κ°μ M (1 ≤ M ≤ 6,000)μ΄ μ£Όμ΄μ§λ€. λμ§Έ μ€λΆν° Mκ°μ μ€μλ λ²μ€ λ Έμ μ μ 보 A, B, C (1 ≤ A, B ≤ N, -10,000 ≤ C ≤ 10,000)κ° μ£Όμ΄μ§λ€.
μΆλ ₯
λ§μ½ 1λ² λμμμ μΆλ°ν΄ μ΄λ€ λμλ‘ κ°λ κ³Όμ μμ μκ°μ 무νν μ€λ μ μΌλ‘ λλ릴 μ μλ€λ©΄ 첫째 μ€μ -1μ μΆλ ₯νλ€. κ·Έλ μ§ μλ€λ©΄ N-1κ° μ€μ κ±Έμ³ κ° μ€μ 1λ² λμμμ μΆλ°ν΄ 2λ² λμ, 3λ² λμ, ..., Nλ² λμλ‘ κ°λ κ°μ₯ λΉ λ₯Έ μκ°μ μμλλ‘ μΆλ ₯νλ€. λ§μ½ ν΄λΉ λμλ‘ κ°λ κ²½λ‘κ° μλ€λ©΄ λμ -1μ μΆλ ₯νλ€.
μμ μ λ ₯ 1
3 4
1 2 4
1 3 3
2 3 -1
3 1 -2
μμ μΆλ ₯ 1
4
3
μμ μ λ ₯ 2
3 4
1 2 4
1 3 3
2 3 -4
3 1 -2
μμ μΆλ ₯ 2
-1
μμ μ λ ₯ 3
3 2
1 2 4
1 2 3
μμ μΆλ ₯ 3
3
-1
μ΅λ¨ 거리λ₯Ό ꡬν΄μΌ νλλ° μμ κ°μ€μΉλ₯Ό κ°μ§ edge κ° μ‘΄μ¬νλ©°, μμ μ¬μ΄ν΄ μ 무λ₯Ό νλ³ν΄μΌ νλ€λ©΄ 벨λ§-ν¬λ μκ³ λ¦¬μ¦μ μ΄μ©νμ¬ ν΄κ²°ν μ μλ€. λ²¨λ§ ν¬λ μκ³ λ¦¬μ¦μ μκ° λ³΅μ‘λλ O(VE) μ΄λ―λ‘ μκ° μ ν λν λλνλ―λ‘, λ²¨λ§ ν¬λ μκ³ λ¦¬μ¦μΌλ‘ νμ΄νμ.
벨λ§-ν¬λ μκ³ λ¦¬μ¦μ Edge list λ₯Ό μ΄μ©ν΄μΌ νλ€. Node λμ Edge λ₯Ό κ°μ§κ³ graph λ₯Ό λ§λ λ€μμ, λ€μ΅μ€νΈλΌ μκ³ λ¦¬μ¦μμ νλ κ·Έ λλμ κ°μ§κ³ ꡬνν΄μ£Όλ©΄ λλ€. λͺ¨λ μμ§λ₯Ό λ°©λ¬Ένλ©°, start μμ end λ‘ λμκ° μμ κΈ°μ‘΄μ ꡬν κ±°λ¦¬λ³΄λ€ μλ€λ©΄ update ν΄μ€λ€. λ€λ§ μ€μν κ²μ start node κ° λ°©λ¬Ένμ§ μμλ node μ λν΄μλ μ λ°μ΄νΈλ₯Ό μ§ννμ§ μλλ€λ κ²μ΄λ€.
μμ κ°μ€μΉλ₯Ό κ°μ§ edge κ° μ‘΄μ¬ν¨μ λ°λΌμ μμ μ¬μ΄ν΄μ μνμ±μ΄ μλ€. μμ μ¬μ΄ν΄μ΄λ μμ κ°μ€μΉλ§ κ°μ§ edge λ€λ‘ ꡬμ±λ μ¬μ΄ν΄μ μλ―Ένλ©°, ν΄λΉ path λ‘ μ§μ νλ κ²½μ° λ¬΄νν μ΅λ¨κ±°λ¦¬κ° λ°μ°νλ κ²μ΄λ€. (μ΄κ±° λλ¬Έμ dist λ°°μ΄μ long μΌλ‘ ν΄μ€μΌνλ€.)
μμ μ¬μ΄ν΄μ νλ³νκΈ° μν΄μ, λ²¨λ§ - ν¬λ μκ³ λ¦¬μ¦μ νλ² μνν λ€μμ ν λ² λ μνν΄μ€λ€.(updateλ νμ§ μλλ€.) κ·Έ κ³Όμ μμ κΈ°μ‘΄μ μ μ₯λ μ΅λ¨ 거리κ°μ΄ λ³λμ΄ μκΈ΄λ€λ©΄ μμ μ¬μ΄ν΄μ΄ μλ κ²μ΄λ€.
import java.io.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.StringTokenizer;
public class Main {
static Edge[] graph;
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 stk = new StringTokenizer(br.readLine());
int n = Integer.parseInt(stk.nextToken()); // λ
Έλ κ°μ
int m = Integer.parseInt(stk.nextToken()); // μ£μ§ κ°μ
graph = new Edge[m + 1];
long[] dist = new long[n + 1];
Arrays.fill(dist, Integer.MAX_VALUE);
for (int i = 0; i < m; i++) {
stk = new StringTokenizer(br.readLine());
int a = Integer.parseInt(stk.nextToken());
int b = Integer.parseInt(stk.nextToken());
int w = Integer.parseInt(stk.nextToken());
graph[i] = new Edge(a, b, w);
}
// λ²¨λ§ - ν¬λ μκ³ λ¦¬μ¦ O(VE)
dist[1] = 0;
for (int i = 1; i < n; i++) {
for (int j = 0; j < m; j++) {
Edge now_edge = graph[j];
if (dist[now_edge.st] != Integer.MAX_VALUE &&
dist[now_edge.end] > dist[now_edge.st] + now_edge.cost) {
dist[now_edge.end] = dist[now_edge.st] + now_edge.cost; // update
}
}
}
// μμ μ¬μ΄ν΄ νλ³νκΈ°
boolean cycle = false;
for(int i = 0 ; i < m; i++){
Edge now_edge = graph[i];
if (dist[now_edge.st] != Integer.MAX_VALUE &&
dist[now_edge.end] > dist[now_edge.st] + now_edge.cost) {
cycle = true;
}
}
if(cycle){
// μμ μ¬μ΄ν΄μ΄ μ‘΄μ¬νλ©΄
bw.write("-1\n");
} else {
// μμ μ¬μ΄ν΄μ΄ μ‘΄μ¬νμ§ μμΌλ©΄
for(int i = 2; i <= n; i++){
if(dist[i]==Integer.MAX_VALUE)
bw.write(-1+"\n");
else bw.write(dist[i]+"\n");
}
}
bw.flush();
bw.close();
}
static class Edge {
int st;
int end;
int cost;
public Edge(int s, int e, int c) {
this.st = s;
this.end = e;
this.cost = c;
}
}
}
'π₯ Algorithm || λ¬Έμ νμ΄ > PS' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[λ°±μ€ 11404] νλ‘μ΄λ (0) | 2023.01.19 |
---|---|
[λ°±μ€ 1219] μ€λ―Όμμ κ³ λ―Ό (JAVA) (0) | 2023.01.18 |
[λ°±μ€ 1854] Kλ²μ§Έ μ΅λ¨κ²½λ‘ μ°ΎκΈ° (JAVA) (0) | 2023.01.18 |
[λ°±μ€ 1916] μ΅μλΉμ© ꡬνκΈ° (JAVA) (0) | 2023.01.17 |
[λ°±μ€ 1753] μ΅λ¨κ²½λ‘ (JAVA) (1) | 2023.01.17 |