๋ฌธ์ (์ถ์ฒ: https://www.acmicpc.net/problem/10282)
< ํดํน >
๋ฌธ์ ํ์ด
์ฐ์ ์์ ํ๋ฅผ ์ฌ์ฉํด์ ์ปดํจํฐ๊ฐ ๊ฐ์ผ๋๋๋ฐ ์ต์ ์๊ฐ์ ๊ตฌํ๋ค.
my solution (Java)
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.PriorityQueue;
import java.util.StringTokenizer;
public class _10282_ { // ํดํน
public static void main(String[] args) throws IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st;
int t = Integer.parseInt(bf.readLine());
ArrayList<ArrayList<int[]>> list = new ArrayList<>();
for (int i = 0; i < t; i++) {
st = new StringTokenizer(bf.readLine());
int n = Integer.parseInt(st.nextToken());
int d = Integer.parseInt(st.nextToken());
int c = Integer.parseInt(st.nextToken());
for (int j = 0; j <= n; j++) {
list.add(new ArrayList<>());
}
for (int j = 0; j < d; j++) {
st = new StringTokenizer(bf.readLine());
int a = Integer.parseInt(st.nextToken());
int b = Integer.parseInt(st.nextToken());
int s = Integer.parseInt(st.nextToken());
list.get(b).add(new int[] { a, s });
}
int dist[] = new int[n + 1];
for (int j = 1; j <= n; j++) {
dist[j] = Integer.MAX_VALUE;
}
dist[c] = 0;
PriorityQueue<int[]> queue = new PriorityQueue<>(new Comparator<int[]>() {
@Override
public int compare(int[] o1, int[] o2) {
if (o1[1] == o2[1]) {
return o1[0] - o2[0];
}
return o1[1] - o2[1];
}
});
queue.add(new int[] { c, 0 });
while (!queue.isEmpty()) {
int temp[] = queue.poll();
for (int j = 0; j < list.get(temp[0]).size(); j++) {
int num[] = list.get(temp[0]).get(j);
if (dist[num[0]] > temp[1] + num[1]) {
queue.add(new int[] { num[0], temp[1] + num[1] });
dist[num[0]] = temp[1] + num[1];
}
}
}
int cnt = 0;
int time = 0;
for (int j = 1; j <= n; j++) {
if (dist[j] != Integer.MAX_VALUE) {
cnt += 1;
if (time < dist[j]) {
time = dist[j];
}
}
}
bw.write(cnt+" "+time+"\n");
list.clear();
}
bw.flush();
}
}
๋ณ์)
t : ํ ์คํธ ์ผ์ด์ค ๊ฐ์
list : ์ปดํจํฐ ์์กด ๊ทธ๋ํ
n, d, c : ์ปดํจํฐ ๊ฐ์, ์์กด์ฑ ๊ฐ์, ํดํน๋นํ ์ปดํจํฐ์ ๋ฒํธ
a, b, s : a๊ฐ b๋ฅผ ์์กด, s์ด
dist : ๊ฐ์ผ๋๊ธฐ๊น์ง ๊ฑธ๋ฆฌ๋ ์๊ฐ
queue : ์ฐ์ ์์ ํ
cnt, time : ๊ฐ์ผ๋๋ ์ปดํจํฐ ์, ๋ง์ง๋ง ์ปดํจํฐ๊ฐ ๊ฐ์ผ๋๊ธฐ๊น์ง ๊ฑธ๋ฆฌ๋ ์๊ฐ
์ปดํจํฐ ์ ๋ณด๋ฅผ ์ ๋ ฅ๋ฐ์ ์์กด ๊ทธ๋ํ๋ฅผ ArrayList์ ์ ์ฅํ๋ค. ์ปดํจํฐ๊ฐ ๊ฐ์ผ๋๊ธฐ๊น์ง ๊ฑธ๋ฆฌ๋ ์๊ฐ์ ์ ์ฅํ๊ธฐ ์ํด ๋ฐฐ์ด๋ก ๋ง๋ค์ด Integer.MAX_VALUE๋ก ์ด๊ธฐํํ๋ค. ํดํน๋นํ ์ปดํจํฐ์ ์๊ฐ์ 0์ผ๋ก ์ด๊ธฐํํ ํ ์ฐ์ ์์ ํ์ ์ ์ฅํ๋ค. ์ฐ์ ์์ ํ๋ ์๊ฐ์ด ์ ์ ๊ฒ์ ์ฐ์ ์์๋ก ํ๋ค. ๊ทธ ํ ์์กด๊ด๊ณ๋ฅผ ํตํด ์ฐ๊ฒฐ๋ ์ปดํจํฐ๋ฅผ ํดํนํ๋๋ฐ ์ต์ ์๊ฐ์ผ๋ก ์ ๋ฐ์ดํธ ๊ฐ๋ฅํ ๋ ํ์ ๋ฃ๋๋ค. ๋ง์ง๋ง์ผ๋ก ๋ต์ ๊ตฌํ๊ธฐ ์ํด dist ๋ฐฐ์ด์ ํ์ธํ๋ฉฐ Integer.MAX_VALUE๊ฐ ์๋ ๊ฐ์๋ฅผ ๊ตฌํ๊ณ ๋ง์ง๋ง ์ปดํจํฐ๊ฐ ๊ฐ์ผ๋๊ธฐ๊น์ง ๊ฑธ๋ฆฌ๋ ์๊ฐ์ ๊ตฌํด ์ถ๋ ฅํ๋ค.
'๐Algorithm > ๐ฅBaekjoon' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Baekjoon] 2847_๊ฒ์์ ๋ง๋ ๋์ค์ด (0) | 2023.12.27 |
---|---|
[Baekjoon] 28432_๋๋ง์๊ธฐ (0) | 2023.12.26 |
[Baekjoon] 11265_๋๋์ง ์๋ ํํฐ (1) | 2023.12.22 |
[Baekjoon] 5972_ํ๋ฐฐ ๋ฐฐ์ก (0) | 2023.12.21 |
[Baekjoon] 2660_ํ์ฅ๋ฝ๊ธฐ (0) | 2023.12.20 |