- Today
- Total
- λ°±μλ
- leetcode
- Graph
- ꡬν
- μΈν΄
- 벨λ§ν¬λ
- λ€μ΅μ€νΈλΌ
- 그리λ
- μμμ λ ¬
- μλ°μμ μ
- λ°±μ€
- tree
- java
- dp
- BFS
- μλ£κ΅¬μ‘°
- MST
- OOP
- μ‘Έμ μν
- νλ‘κ·Έλλ¨Έμ€
- pytorch
- array
- CS
- μλ°
- PS
- λ°μ΄ν°λ² μ΄μ€
- λ¬Έλ²
- database
- Algorithm
- spring
Partially Committed
[λ°±μ€ 1219] μ€λ―Όμμ κ³ λ―Ό (JAVA) λ³Έλ¬Έ
[λ°±μ€ 1219] μ€λ―Όμμ κ³ λ―Ό (JAVA)
WonderJay 2023. 1. 18. 14:19λ¬Έμ
https://www.acmicpc.net/problem/1219
μ€λ―Όμμ μΈμΌμ¦λ§¨μ΄λ€. μ€λ―Όμμ νμ¬ μ¬μ₯λμ μ€λ―Όμμκ² λ¬Όκ±΄μ μ΅λν λ§μ΄ νμμ μ΅λ μ΄μ€μ λ¨κΈ°λΌκ³ νλ€.
μ€λ―Όμμ κ³ λ―Όμ λΉ μ‘λ€.
μ΄λ»κ² νλ©΄ μ΅λ μ΄μ€μ λΌ μ μμκΉ?
μ΄ λλΌμλ Nκ°μ λμκ° μλ€. λμλ 0λ²λΆν° N-1λ²κΉμ§ λ²νΈ λ§€κ²¨μ Έ μλ€. μ€λ―Όμμ μ¬νμ Aλμμμ μμν΄μ Bλμμμ λλλ€.
μ€λ―Όμμ΄ μ΄μ©ν μ μλ κ΅ν΅μλ¨μ μ¬λ¬ κ°μ§κ° μλ€. μ€λ―Όμμ λͺ¨λ κ΅ν΅μλ¨μ μΆλ° λμμ λμ°© λμλ₯Ό μκ³ μκ³ , λΉμ©λ μκ³ μλ€. κ²λ€κ°, μ€λ―Όμμ κ°κ°μ λμλ₯Ό λ°©λ¬Έν λλ§λ€ λ² μ μλ λμ μκ³ μλ€. μ΄ κ°μ λμλ§λ€ λ€λ₯΄λ©°, μ‘μλ κ³ μ λμ΄μλ€. λ, λμλ₯Ό λ°©λ¬Έν λλ§λ€ κ·Έ λμ λ²κ² λλ€.
μ€λ―Όμμ λμ°© λμμ λμ°©ν λ, κ°μ§κ³ μλ λμ μ‘μλ₯Ό μ΅λλ‘ νλ €κ³ νλ€. μ΄ μ΅λκ°μ ꡬνλ νλ‘κ·Έλ¨μ μμ±νμμ€.
μ€λ―Όμμ΄ λ²λ λλ³΄λ€ μ°λ λμ΄ λ§λ€λ©΄, λμ°© λμμ λμ°©ν λ κ°μ§κ³ μλ λμ μ‘μκ° μμκ° λ μλ μλ€. λ, κ°μ λμλ₯Ό μ¬λ¬ λ² λ°©λ¬Έν μ μμΌλ©°, κ·Έ λμλ₯Ό λ°©λ¬Έν λλ§λ€ λμ λ²κ² λλ€. λͺ¨λ κ΅ν΅ μλ¨μ μ λ ₯μΌλ‘ μ£Όμ΄μ§ λ°©ν₯μΌλ‘λ§ μ΄μ©ν μ μμΌλ©°, μ¬λ¬ λ² μ΄μ©ν μλ μλ€.
μ λ ₯
첫째 μ€μ λμμ μ Nκ³Ό μμ λμ, λμ°© λμ κ·Έλ¦¬κ³ κ΅ν΅ μλ¨μ κ°μ Mμ΄ μ£Όμ΄μ§λ€. λμ§Έ μ€λΆν° Mκ°μ μ€μλ κ΅ν΅ μλ¨μ μ λ³΄κ° μ£Όμ΄μ§λ€. κ΅ν΅ μλ¨μ μ λ³΄λ “μμ λ κ°κ²©”κ³Ό κ°μ νμμ΄λ€. λ§μ§λ§ μ€μλ μ€λ―Όμμ΄ κ° λμμμ λ² μ μλ λμ μ΅λκ°μ΄ 0λ² λμλΆν° μ°¨λ‘λλ‘ μ£Όμ΄μ§λ€.
Nκ³Ό Mμ 50λ³΄λ€ μκ±°λ κ°κ³ , λμ μ΅λκ°κ³Ό κ΅ν΅ μλ¨μ κ°κ²©μ 1,000,000λ³΄λ€ μκ±°λ κ°μ μμ΄ μλ μ μμ΄λ€.
μΆλ ₯
첫째 μ€μ λμ°© λμμ λμ°©ν λ, κ°μ§κ³ μλ λμ μ‘μμ μ΅λκ°μ μΆλ ₯νλ€. λ§μ½ μ€λ―Όμμ΄ λμ°© λμμ λμ°©νλ κ²μ΄ λΆκ°λ₯ν λλ "gg"λ₯Ό μΆλ ₯νλ€. κ·Έλ¦¬κ³ , μ€λ―Όμμ΄ λμ°© λμμ λμ°©νμ λ λμ 무νν λ§μ΄ κ°μ§κ³ μμ μ μλ€λ©΄ "Gee"λ₯Ό μΆλ ₯νλ€.
μμ μ λ ₯ 1
5 0 4 7
0 1 13
1 2 17
2 4 20
0 3 22
1 3 4747
2 0 10
3 4 10
0 0 0 0 0
μμ μΆλ ₯ 1
-32
μμ μ λ ₯ 2
5 0 4 5
0 1 10
1 2 10
2 3 10
3 1 10
2 4 10
0 10 10 110 10
μμ μΆλ ₯ 2
Gee
μμ μ λ ₯ 3
3 0 2 3
0 1 10
1 0 10
2 1 10
1000 1000 47000
μμ μΆλ ₯ 3
gg
μμ μ λ ₯ 4
2 0 1 2
0 1 1000
1 1 10
11 11
μμ μΆλ ₯ 4
Gee
μμ μ λ ₯ 5
1 0 0 1
0 0 10
7
μμ μΆλ ₯ 5
7
μμ μ λ ₯ 6
5 0 4 7
0 1 13
1 2 17
2 4 20
0 3 22
1 3 4747
2 0 10
3 4 10
8 10 20 1 100000
μμ μΆλ ₯ 6
99988
μ΄λ ΅λ€.. π
벨λ§ν¬λ μκ³ λ¦¬μ¦μ μμ©νλ λ¬Έμ μ΄λ€.
λ¬Έμ μν©μ κ°λ¨νκ² μ 리ν΄λ³΄λ©΄,
μ€λ―Όμμ κ΅ν΅μλ¨μ νκ³ κ°κ°μ λμλ₯Ό λ°©λ¬Ένλ€.
κ·Έλ¬λ©΄ κ΅ν΅λΉμ©μ μ§λΆνκ³ , κ·Έ λμμμ λ² μ μλ λμ λ²μ΄λ€μΈλ€.
μΆλ° λμμ λμ°© λμκ° μ£Όμ΄μ‘μ λ, μ€λ―Όμμ΄ λ² μ μλ μ΅λ κ°μ ꡬνλ€.
λ€λ§, μ€λ―Όμμ΄ λμ°© λμμ λλ¬ν μ μλ κ²½μ°μλ "gg" λ₯Ό μΆλ ₯νλ€.
λ§μ½, μ€λ―Όμμ΄ λ² μ μλ λμ΄ λ¬΄νλλΌλ©΄ "Gee" λ₯Ό μΆλ ₯νλ€.
βΆ μ΅λ¨ κ±°λ¦¬κ° μλ μ΅λ 거리(λΉμ©)λ₯Ό ꡬνλ©΄ λλ€.
βΆ μ€λ―Όμμ΄ λ² μ μλ λμ΄ λ¬΄νλ..? λΌλ κ²μ μμ μ¬μ΄ν΄μ΄ λ°μνλ κ²½μ°μ΄λ€. μ¦, μ΅λ 거리λ₯Ό ꡬνλ©΄μ λμμ μμ μ¬μ΄ν΄μ μ 무λ₯Ό νλ³ν΄μΌ νλ€.
βΆ λ²¨λ§ ν¬λ μκ³ λ¦¬μ¦μ μμ©νμ.
π₯ κ·Όλ°, μμ μ¬μ΄ν΄μ΄ μμΌλ©΄ μ€λ―Όμμ 무쑰건 무νλμ λμ λ² μ μλ?
βΆ μλλ€!
βΆ μΆλ° λμμμ λμ°© λμλ‘ κ°λ κ²½λ‘μ μμ μ¬μ΄ν΄μ νμ±ν λ Έλκ° μμ μλ μλ€.
βΆ μ¦, μμ μ¬μ΄ν΄μ μ 무λ₯Ό λ¨μνκ² νλ¨νλ κ²μ΄ μλλΌ μμ μ¬μ΄ν΄μ μν΄μ λμ°© λ Έλμ λλ¬ν μ μλ€λ©΄ μμ μ¬μ΄ν΄λ‘ κ°μ§ μλλ€.
π€¨ μ΄λ μ΄λ»κ² μ²λ¦¬ν μ μμκΉ...
⢠벨λ§ν¬λ μκ³ λ¦¬μ¦μ μνν λ€μ BFS λ₯Ό νλ² λ μννμ¬ λλ¬ μ¬λΆλ₯Ό νλ¨ν΄λ λ κ² κ°λ€.
βΆ λ€λ§ μλ λ°©λ²μΌλ‘ ν΄κ²°νλ κ²μ΄ λ μ½λ€. (λ°μμ μ΄λ ΅λ€..γ )
βΆ μ λ¬Έμ μμ λμ(λ Έλ)μ κ°μλ μ΅λ 100 μ΄λ€.
βΆ μΌλ°μ μΌλ‘ λ²¨λ§ ν¬λ μκ³ λ¦¬μ¦μΌλ‘ N-1 λ² λ§νΌ μμ§λ₯Ό νμνλ©° distance λ°°μ΄μ μ λ°μ΄νΈλ₯Ό ν ν λ°, N + 100 λ²μ λλ‘ μΆ©λΆν λ§μ νμμ ν΄μ£Όλ©΄μ μμ μ¬μ΄ν΄μμ λλ¬ν μ μλ λ Έλλ€μ λͺ¨λ distance λ₯Ό MAX λ‘ μ§μ ν΄μ€λ€.
βΆ μ΄λ κ² ν΄μ£Όλ©΄ 벨λ§ν¬λ μκ³ λ¦¬μ¦μ μννμμ λ, λμ°© λμκ° MAX κ° λλ€λ©΄ μμ μ¬μ΄ν΄μ κ±°μ³μ λμ°© λμμ μ€λ¬ν μ μκ³ , μ΄λ 곧 무νλμ λμ λ² μ μλ€λ κ²μ μλ―Ένλ€. Gee!
βΆ λμ°© λμκ° MAX κ° μλλΌλ κ²μ μμ μ¬μ΄ν΄μμ λμ°© λμλ‘ λλ¬ν μ μμΌλ―λ‘ distance [λμ°© λμ]μ μ μ₯λ κ°μ μΆλ ₯νλ€.
βΆ λ²¨λ§ ν¬λ μκ³ λ¦¬μ¦μ μννκΈ° μ μ distnace λ°°μ΄μ MIN μΌλ‘ μ΄κΈ°νν΄μ€λ€. (μΌλ°μ μΌλ‘λ MAX λ‘ μ΄κΈ°ννλ€. μ MIN μ΄λλ©΄ λ²¨λ§ ν¬λ μκ³ λ¦¬μ¦μΌλ‘ μ΅λ¨ κ±°λ¦¬κ° μλ μ΅λ 거리λ₯Ό μ°Ύλλ‘ λ³ννκΈ° μν¨μ΄λ€.)
βΆ λ²¨λ§ ν¬λ μκ³ λ¦¬μ¦μ μννκ³ λμ distance [ λμ°©λμ ] κ° μ¬μ ν MIN μ΄λΌλ κ²μ μ€λ―Όμμ΄ λμ°© λμλ‘ λλ¬νμ§ λͺ»νλ€λ κ²μ μλ―Ένλ€. Gee
π§ λ²¨λ§ ν¬λ μκ³ λ¦¬μ¦μμ distance λ₯Ό μ λ°μ΄νΈ νλ λ‘μ§μ μλμ κ°λ€.
β» νμ¬ νμ μ€μΈ edge μ λνμ¬, (edge ν΄λμ€μλ μΆλ° λμ, λμ°© λμ, κ΅ν΅ λΉμ©μ΄ λ€μ΄μλ€.)
1. μΆλ° λ Έλκ° λ°©λ¬Ένμ§ μμ λ ΈλλΌλ©΄ (dist[now_edge.μΆλ°λμ]==MIN) update νμ§ μλλ€.
2. λ§μ½ μΆλ° λ Έλκ° μμ μ¬μ΄ν΄μ μ°κ²°λ λ ΈλλΌλ©΄ (dist[now_edge.μΆλ°λμ]==MAX) λμ°© λ Έλ λν MAX λ‘ ν΄μ€λ€.
μλλ©΄ A→B μ κ²½λ‘μμ A κ° μμ μ¬μ΄ν΄μ μ°κ²°λ λ ΈλλΌλ©΄ λΉμ°ν B λν μμ μ¬μ΄ν΄μ μ°κ²°λ λ ΈλμΌ κ²μ΄κΈ° λλ¬Έμ΄λ€.
3. μ κ²½μ°μ λͺ¨λ ν΄λΉνμ§ μμΌλ©΄μ, μ€λ―Όμμ΄ νμ¬ νμμ€μΈ edge μ λμ°© λ Έλλ‘ κ°μ λ λ λ§μ λμ λ² μ μλ€λ©΄?
(dist[now_edge.λμ°©λμ] < dist[now_edge.μΆλ°λμ] + now_edge.λμ°©λμμμ λ² μ μλ λ - now_edge.κ΅ν΅λΉμ©)
distance λ₯Ό μ λ°μ΄νΈνλ€.
β μ΄ λ¬Έμ μμ μ€μν κ²μ μμμ μΈκΈνλ―μ΄ μμ μ¬μ΄ν΄μμ λμ°© λμλ‘ λλ¬κ°λ₯νμ§ μλ μ§λ₯Ό νλ¨ν΄μΌνλ€.
⢠벨λ§-ν¬λ μκ³ λ¦¬μ¦μμ μ¬μ΄ν΄ μ¬λΆλ μ£μ§μ κ°μλ§νΌμ μ λ°μ΄νΈ μ΄νμ, 벨λ§-ν¬λ μκ³ λ¦¬μ¦μ λ μννμ λ dist κ°μ λ³νκ° μκΈ°λ μ§ μ¬λΆλ₯Ό νμΈνλ©΄ λλ€.
βΆ μ¦, edge μ κ°μλ§νΌ μ λ°μ΄νΈλ₯Ό μ§ν ν λ€μλ μ λ°μ΄νΈκ° λ°μνλ€λ©΄ μμ μ¬μ΄ν΄μ΄ μλ€λ κ²μ΄λ€.
⢠보ν΅μΈ μμ μ¬μ΄ν΄ μ¬λΆλ§ νλ¨νλ©΄ λμ§λ§, μ΄ λ¬Έμ μμλ μμ μ¬μ΄ν΄κ³Ό λμ°© λμκ° μ°κ²°λμλμ§ μ¬λΆλ₯Ό λ°λ‘ νλ¨ν΄μ£Όμ΄μΌ νλ€.
βΆ κ·Έλ¬λ©΄ μ΄λ»κ² ν κΉ?
βΆ μ£μ§μ κ°μλ³΄λ€ λ λ§μ λ°λ³΅μ μννλ©°, μμ μ¬μ΄ν΄μ΄ λ°μνλ€λ©΄ ν΄λΉ μ£μ§μ λνμ¬ dist[now_edge.λμ°©λμ] = MAX λ‘ μ§μ ν΄μ€λ€.
βΆ μ΄λ κ² νλ©΄ μμ μ¬μ΄ν΄μμ λλ¬ν μ μλ λͺ¨λ λ Έλλ dist κ°μ΄ MAX κ° λλ€.
μ κ³Όμ μ΄ λλλ©΄ dist[λμ°© λμ] μ λ°λΌμ Gee, gg, dist[λμ°© λμ] λ₯Ό μΆλ ₯ν΄μ£Όλ©΄ ν΄κ²°!
import java.io.*;
import java.util.Arrays;
import java.util.StringTokenizer;
public class Main {
static Edge[] graph;
public static void main(String[] args) throws IOException {
System.setIn(new FileInputStream("src/input.txt"));
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 start = Integer.parseInt(stk.nextToken()); // μμλμ
int destination = Integer.parseInt(stk.nextToken()); // λμ°© λμ
int m = Integer.parseInt(stk.nextToken()); // μμ§μ μ
graph = new Edge[m + 1];
long[] dist = new long[n + 1];
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);
}
long [] money = new long[n+1];
stk = new StringTokenizer(br.readLine());
for(int i = 0 ; i < n; i++){
money[i] = Integer.parseInt(stk.nextToken());
}
// λ²¨λ§ ν¬λ μκ³ λ¦¬μ¦
Arrays.fill(dist, Long.MIN_VALUE);
dist[start] = money[start];
for(int i = 0 ; i <= n+100; i++){
for(int j = 0 ; j < m; j++){
Edge now_edge = graph[j];
if(dist[now_edge.st]==Long.MIN_VALUE)
continue;
else if(dist[now_edge.st]==Long.MAX_VALUE){
dist[now_edge.end] = Long.MAX_VALUE;
}
else if(dist[now_edge.end] < dist[now_edge.st]+money[now_edge.end]-now_edge.cost){
dist[now_edge.end] = dist[now_edge.st]+money[now_edge.end]-now_edge.cost;
if(i>=n)
dist[now_edge.end] = Long.MAX_VALUE;
}
}
}
if(dist[destination] == Long.MIN_VALUE)
bw.write("gg\n");
else if(dist[destination] == Long.MAX_VALUE)
bw.write("Gee\n");
else bw.write(dist[destination]+"\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' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[λ°±μ€ 11403] κ²½λ‘ μ°ΎκΈ° (0) | 2023.01.19 |
---|---|
[λ°±μ€ 11404] νλ‘μ΄λ (0) | 2023.01.19 |
[λ°±μ€ 11657] νμλ¨Έμ (JAVA) (0) | 2023.01.18 |
[λ°±μ€ 1854] Kλ²μ§Έ μ΅λ¨κ²½λ‘ μ°ΎκΈ° (JAVA) (0) | 2023.01.18 |
[λ°±μ€ 1916] μ΅μλΉμ© ꡬνκΈ° (JAVA) (0) | 2023.01.17 |