โจ ๋ค์ต์คํธ๋ผ โ ์ต๋จ๊ฒฝ๋ก
https://www.acmicpc.net/problem/1504
1504๋ฒ: ํน์ ํ ์ต๋จ ๊ฒฝ๋ก
์ฒซ์งธ ์ค์ ์ ์ ์ ๊ฐ์ N๊ณผ ๊ฐ์ ์ ๊ฐ์ E๊ฐ ์ฃผ์ด์ง๋ค. (2 ≤ N ≤ 800, 0 ≤ E ≤ 200,000) ๋์งธ ์ค๋ถํฐ E๊ฐ์ ์ค์ ๊ฑธ์ณ์ ์ธ ๊ฐ์ ์ ์ a, b, c๊ฐ ์ฃผ์ด์ง๋๋ฐ, a๋ฒ ์ ์ ์์ b๋ฒ ์ ์ ๊น์ง ์๋ฐฉํฅ ๊ธธ์ด ์กด
www.acmicpc.net
๐ ๊ณ ๋ คํด์ผํ ์
- ๋ฐฉํฅ์ด ์๋ ๊ทธ๋ํ์ด๋ค.
- 1๋ฒ ์ ์ ์์ N๋ฒ ์ ์ ์ผ๋ก ์ต๋จ๊ฑฐ๋ฆฌ๋ก ์ด๋ํ๋ค.
- ์ฃผ์ด์ง ๋ ์ ์ ์ ๋ฐ๋์ ๊ฑฐ์ณ์ผ ํ๋ค.
- ๋ ์ ์ ์ด v1, v2๋ผ๋ฉด 1 โ v1 โ v2 โ N ๋๋ 1 โ v2 โ v1 โ N ๋๊ฐ์ง ๋ฐฉ๋ฒ์ผ๋ก ์ด๋ํ ์ ์๋ค.
๐น๏ธ ํ์ด ๋ฐฉ๋ฒ
1๏ธโฃ ๋ ธ๋์ ๋ํ ์ ๋ณด (์ด๋ํด์ผํ๋ ๋ ธ๋ = v, ํด๋นํ๋ ๋ ธ๋๊น์ง ๋๋ฌํ๋๋ฐ ์์๋๋ ๊ฑฐ๋ฆฌ = w)๋ฅผ ์ ๋ ฅ๋ฐ๋๋ค.
2๏ธโฃ 1 โ v1 โ v2 โ N ์ผ๋ก ๊ฐ๋ ๋ฐฉ๋ฒ๊ณผ 1 โ v2 โ v1 โ N ์ผ๋ก ๊ฐ๋ ๋ฐฉ๋ฒ์ ๋ค์ต์คํธ๋ผ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ์ฌ ๊ตฌํ๋ค.
3๏ธโฃ ์์ํ๋ ๋ ธ๋์ ๋ชฉ์ ์ง ๋ ธ๋๋ฅผ ๋งค๊ฐ๋ณ์๋ก ๋ฐ์์ ๋ค์ต์คํธ๋ผ ์๊ณ ๋ฆฌ์ฆ์ ์ํํ๋ค.
4๏ธโฃ ๋ ๊ฐ์ง ๋ฐฉ๋ฒ ์ค ์ต๋จ๊ฑฐ๋ฆฌ๋ฅผ ์ ํํด์ ์ถ๋ ฅํ๋ค.
๐ฉ๐ป ์ ์ฒด ์ฝ๋
public class BOJ_1504_ํน์ ํ์ต๋จ๊ฒฝ๋ก {
static int N, E;
static int v1, v2;
static boolean[] visit;
static int INF = Integer.MAX_VALUE;
static int[] dist;
static ArrayList<Info>[] arrayList;
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 this.w-o.w;
}
}
static int dijkstra(int start, int end){
PriorityQueue<Info> pq = new PriorityQueue<>();
Arrays.fill(dist, INF);
visit = new boolean[N + 1];
pq.add(new Info(start, 0));
dist[start]=0;
while (!pq.isEmpty()) {
Info now = pq.poll();
if(!visit[now.v]) visit[now.v] = true;
for (int i = 0; i < arrayList[now.v].size(); i++) {
Info next = arrayList[now.v].get(i);
if (!visit[next.v] && dist[next.v] > now.w + next.w) {
dist[next.v] = now.w + next.w;
pq.add(new Info(next.v, dist[next.v]));
}
}
}
return dist[end];
}
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
N = Integer.parseInt(st.nextToken());
E = Integer.parseInt(st.nextToken());
arrayList = new ArrayList[N + 1];
dist = new int[N + 1];
visit = new boolean[N + 1];
for (int i = 1; i <= N; i++) {
arrayList[i] = new ArrayList<>();
}
for (int i = 0; i < E; i++) {
st = new StringTokenizer(br.readLine());
int a = Integer.parseInt(st.nextToken());
int b = Integer.parseInt(st.nextToken());
int c = Integer.parseInt(st.nextToken());
arrayList[a].add(new Info(b, c));
arrayList[b].add(new Info(a, c));
}
st = new StringTokenizer(br.readLine());
v1 = Integer.parseInt(st.nextToken());
v2 = Integer.parseInt(st.nextToken());
int ans1=0, ans2=0;
int result;
// 1 โ v1 โ v2 โ N
ans1+=dijkstra(1, v1);
ans1+=dijkstra(v1, v2);
ans1+=dijkstra(v2, N);
// 1 โ v2 โ v1 โ N
ans2+=dijkstra(1, v2);
ans2+=dijkstra(v2, v1);
ans2+=dijkstra(v1, N);
if(ans1>=INF && ans2>=INF) result=-1;
else result = Math.min(ans1, ans2);
System.out.println(result);
}
}
'์๊ณ ๋ฆฌ์ฆ > BOJ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BOJ] 21609 ์์ด ์คํ๊ต - Java (0) | 2024.02.26 |
---|---|
[BOJ] 1018 ์ฒด์คํ ๋ค์ ์น ํ๊ธฐ - Java (0) | 2023.12.05 |
[BOJ] 18352 ํน์ ๊ฑฐ๋ฆฌ์ ๋์ ์ฐพ๊ธฐ - Java (0) | 2023.12.04 |
[BOJ] 4179 ๋ถ! - Java (1) | 2023.10.25 |
[BOJ] 14502 ์ฐ๊ตฌ์ - Java (0) | 2023.09.28 |