β¨ κ·Έλν π λ€μ΅μ€νΈλΌ (μ΅λ¨κ²½λ‘ νμ μκ³ λ¦¬μ¦)
https://www.acmicpc.net/problem/1238
1238λ²: νν°
첫째 μ€μ N(1 ≤ N ≤ 1,000), M(1 ≤ M ≤ 10,000), Xκ° κ³΅λ°±μΌλ‘ ꡬλΆλμ΄ μ λ ₯λλ€. λ λ²μ§Έ μ€λΆν° M+1λ²μ§Έ μ€κΉμ§ iλ²μ§Έ λλ‘μ μμμ , λμ , κ·Έλ¦¬κ³ μ΄ λλ‘λ₯Ό μ§λλλ° νμν μμμκ° Tiκ° λ€μ΄
www.acmicpc.net
π κ³ λ €ν΄μΌν μ
- κ° νμλ€μ μ§μμ νν° μ₯μκΉμ§ μ€κ³ κ°λ λ° κ±Έλ¦¬λ μ΅λ¨ μκ° κ΅¬νκΈ°
- λλ‘λ€μ λ¨λ°©ν₯ π κΈΈλ§λ€ 걸리λ μκ°μ΄ λ€λ₯΄λ―λ‘ μ€κ³ κ°λ κΈΈ λν λ€λ¦ !
- Nλͺ μ νμλ€ μ€ μ€κ³ κ°λ λ° κ°μ₯ λ§μ μκ°μ μλΉν νμ μΆλ ₯
πΉοΈ νμ΄κ³Όμ
μ§μμ νν° μ₯μκΉμ§ κ°λ λ° κ±Έλ¦¬λ μ΅λ¨ μκ° + νν° μ₯μμμ μ§κΉμ§ κ°λ λ° κ±Έλ¦¬λ μ΅λ¨ μκ°μ κ΅¬ν΄ μ΄ μ€ κ°μ₯ λ§μ μκ°μ μλΉν νμμ ꡬνλ©΄ λλ€.
νμμ μμμ , λμ , κ±Έλ¦° μκ°μ΄ μ λ ₯ λ°μ΄ν°λ‘ μ£Όμ΄μ§λ―λ‘ νν° μ₯μμμ μ§κΉμ§ κ°λ λ° κ±Έλ¦¬λ μκ°μ νλμ μ μ μμ λ€λ₯Έ λͺ¨λ μ μ κΉμ§μ μ΅λ¨ μκ°μ ꡬνλ λ€μ΅μ€νΈλΌ μκ³ λ¦¬μ¦μ μ¬μ©νλ©΄ λλ€.
κ·Έλ¬λ, νμμ μ§μμ νν°μ₯μκΉμ§ κ°λ λ° κ±Έλ¦° μκ°μ ꡬνλ €λ©΄ κ° νμλ§λ€ λ€μ΅μ€νΈλΌ μκ³ λ¦¬μ¦μ μ¬μ©ν΄μ ꡬν΄μΌ νλ€.
μ λ ₯ λ°μ΄ν°λ‘ μ£Όμ΄μ§ κ°μ μλ°©ν₯μΌλ‘ μ μ₯νλ©΄ λͺ¨λ νμλ§λ€ λ€μ΅μ€νΈλΌ μκ³ λ¦¬μ¦μ μ¬μ©νμ§ μκ³ , ν λ²μ λ€μ΅μ€νΈλΌλ₯Ό ν΅ν΄ ꡬν μ μλ€.
βοΈ μ뱑ν₯μΌλ‘ μ μ₯ : μ§μμ νν°κΉμ§ κ°λ λ° κ±Έλ¦¬λ μκ°μ νν°μμ μ§κΉμ§ κ°λ λ° κ±Έλ¦¬λ μκ°μΌλ‘ μ μ₯νλ κ² !
π©π» μ 체 μ½λ
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.*;
public class BOJ_1238_νν°{
static int N, M, X;
static ArrayList<Info>[] homeToParty;
static ArrayList<Info>[] partyToHome;
static int[] pthDist;
static int[] htpDist;
static class Info implements Comparable<Info>{
int v, w;
public Info(int v, int w){
this.v=v;
this.w=w;
}
@Override
public int compareTo(Info o){
return w-o.w;
}
}
static void dijkstra(ArrayList<Info>[] arrList, int[] dist){
PriorityQueue<Info> pq = new PriorityQueue<>();
pq.add(new Info(X, 0));
dist[X]=0;
while(!pq.isEmpty()){
Info now = pq.poll();
for (Info next : arrList[now.v]) {
if(dist[next.v] > dist[now.v]+next.w){
dist[next.v] = dist[now.v]+next.w;
pq.add(new Info(next.v, dist[next.v]));
}
}
}
}
public static void main(String[] args) throws Exception{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st = new StringTokenizer(br.readLine());
N = Integer.parseInt(st.nextToken());
M = Integer.parseInt(st.nextToken());
X = Integer.parseInt(st.nextToken());
homeToParty = new ArrayList[N+1]; // μ§μμ νν° μ₯μλ‘ κ°λ λ° μμλλ μ΅λ¨ μκ°
partyToHome = new ArrayList[N+1]; // νν° μ₯μμμ μ§μΌλ‘ λμκ°λ λ° μμλλ μ΅λ¨ μκ°
for(int i=1; i<=N; i++){
homeToParty[i] = new ArrayList<>();
partyToHome[i] = new ArrayList<>();
}
pthDist = new int[N+1];
htpDist = new int[N+1];
Arrays.fill(pthDist, Integer.MAX_VALUE);
Arrays.fill(htpDist, Integer.MAX_VALUE);
for(int i=1; i<=M; i++){
st = new StringTokenizer(br.readLine());
int start = Integer.parseInt(st.nextToken());
int end = Integer.parseInt(st.nextToken());
int time = Integer.parseInt(st.nextToken());
partyToHome[start].add(new Info(end, time));
homeToParty[end].add(new Info(start, time));
}
dijkstra(partyToHome, pthDist);
dijkstra(homeToParty, htpDist);
int ans=-1;
for(int i=1; i<=N; i++){
ans = Math.max(pthDist[i] + htpDist[i], ans);
}
bw.write(ans + " ");
bw.flush();
bw.close();
}
}
'μκ³ λ¦¬μ¦ > BOJ' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[BOJ] 2457 곡주λμ μ μ (0) | 2024.04.22 |
---|---|
[BOJ] 1202 보μλλ - Java (1) | 2024.04.19 |
[BOJ] 2169 λ‘λ΄ μ‘°μ’ νκΈ° - Java (1) | 2024.04.16 |
[BOJ] 14503 λ‘λ΄μ²μκΈ° - Java (0) | 2024.04.11 |
[BOJ] 19238 μ€ννΈ νμ - Java (0) | 2024.04.11 |