๋ฌธ์
https://www.acmicpc.net/problem/1238
์ ๊ทผ 1 โญ
- ํ๋ก์ด๋ ์์ (00:21:37)
๊ฐ๊ฐ์ 1~N๋ฒ ๋ง์์ ์ด๊ณ ์๋ ํ์๋ค์ด X๋ฒ ๋ง์์ ์๋ณตํ ๋ ๊ฐ์ฅ ์๊ฐ์ด ๋ง์ด ๊ฑธ๋ฆฌ๋ ํ์์ด ๋๊ตฐ์ง ์ฐพ๋ ๋ฌธ์ ์ด๋ค. ์ฆ, 1~N๋ฒ ๋ง์์์ X๋ฒ ๋ง์๊น์ง์ ์ต๋จ ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ๊ณ , X๋ฒ ๋ง์์์ 1~N๋ฒ ๋ง์๊น์ง์ ์ต๋จ ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ ๋ค์์ 1↔X, 2↔X, …, N↔X ์ค ์ต๋๊ฐ์ ๊ตฌํ๋ฉด ๋๋ ๋ฌธ์ ์ด๋ค.
๋ ๊ฐ์ง์ ์ต๋จ ๊ฑฐ๋ฆฌ๋ฅผ ํ๋ฒ์ ๊ตฌํ๋ ๊ฐ์ฅ ์ฌ์ด ๋ฐฉ๋ฒ์ด ๋ฐ๋ก ‘ํ๋ก์ด๋ ์์ ’์ด๋ค. ํ๋ก์ด๋ ์์ ์ ๋ชจ๋ ์ ์ ์์ ์์ํด ๋ชจ๋ ์ ์ ๊น์ง์ ์ต๋จ ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ๋ ์๊ณ ๋ฆฌ์ฆ์ด๋ค!
์ ๊ทผ 2 ๐บ
- ๋ค์ต์คํธ๋ผ (00:30:12)
๋ ๋ฒ์งธ ํด๊ฒฐ ๋ฐฉ๋ฒ์ผ๋ก๋ ๋ค์ต์คํธ๋ผ๊ฐ ์๋ค.
๐ก 1~N๋ฒ ๋ง์์์ X๋ฒ ๋ง์๊น์ง์ ์ต๋จ ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ๊ณ , X๋ฒ ๋ง์์์ 1~N๋ฒ ๋ง์๊น์ง์ ์ต๋จ ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ ๋ค์์ 1↔X, 2↔X, …, N↔X ์ค ์ต๋๊ฐ์ ๊ตฌํ๋ฉด ๋๋ ๋ฌธ์
์์ ์ ๊ทผ๋ฒ์์ ๋งํ๋ฏ์ด ๋ค์ต์คํธ๋ผ ์๊ณ ๋ฆฌ์ฆ์ ํตํด 1~N๋ฒ ๋ง์์์ X๋ฒ ๋ง์๊น์ง์ ์ต๋จ ๊ฑฐ๋ฆฌ์ X๋ฒ ๋ง์์์ 1~N๋ฒ ๋ง์๊น์ง์ ์ต๋จ ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํด์ ๋์ ํฉ ์ค ์ต๋๊ฐ์ ์ถ๋ ฅํด๋ ๋๋ค. ๊ทธ๋ฐ๋ฐ ์ข ์๊ฐํด๋ณด๋ฉด ๋ค์ต์คํธ๋ผ๋ ์ด๋ ํ ์ ์ ์์ ๋ค๋ฅธ ๋ชจ๋ ์ ์ ๊น์ง์ ์ต๋จ ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ๋ ์๊ณ ๋ฆฌ์ฆ์ธ๋ฐ, ์ด๋ป๊ฒ ‘1~N๋ฒ ๋ง์์์ X๋ฒ ๋ง์๊น์ง์ ์ต๋จ ๊ฑฐ๋ฆฌ’๋ฅผ ๊ตฌํ ์ ์์๊น? ๋จ์ํ 1~N๋ฒ ๋ฐ๋ณตํ์ฌ ๊ตฌํ๋ ๊ฒ์ผ๊น?
์ฒ์์ ์ด๋ ๊ฒ ์๊ฐํ์๋๋ฐ, ๊ฒฐ๋ก ๋ถํฐ ๋งํ๋ฉด ์๋๋ค! ๋จ์ํ ๊ทธ๋ํ์ ๊ฐ์ ๋ค์ ๋ค์ง์ผ๋ฉด ๋๋ค. ๋ค์ง์ ๊ทธ๋ํ๋ฅผ ๊ฐ์ง๊ณ X๋ฒ ์ ์ ์ ๊ธฐ์ค์ผ๋ก ๋ค์ต์คํธ๋ผ ์๊ณ ๋ฆฌ์ฆ์ ๋๋ฆฌ๋ฉด ์ค์ ๋ก๋ X ์ ์ ์์ 1~N ์ ์ ๊น์ง์ ์ต๋จ ๊ฑฐ๋ฆฌ์ง๋ง ๋ ผ๋ฆฌ์ ์ผ๋ก๋ 1~N ์ ์ ์์ X ์ ์ ๊น์ง์ ์ต๋จ ๊ฑฐ๋ฆฌ๊ฐ ๋๋ ๊ฒ์ด๋ค!
๊ทธ๋ํ์ ๋ํ ๋ฐ์์ ์ ํ์ด ์กฐ๊ธ ํ์ํ ๋ฌธ์ ์๋ค. ์ด๊ฒ ์๊ฐ์๋์ ์ง๋ฌธ ๊ฒ์ํ ๋ดค๋ค..
์ฐธ๊ณ : https://www.acmicpc.net/board/view/113888
์์ค ์ฝ๋ ๐ก
// ํ๋ก์ด๋ ์์
public class BOJ_1238 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int n = Integer.parseInt(st.nextToken());
int m = Integer.parseInt(st.nextToken());
int x = Integer.parseInt(st.nextToken());
int[][] shortest = new int[n+1][n+1];
for (int i = 1; i < n + 1; i++) {
for (int j = 1; j < n + 1; j++) {
if (i == j) shortest[i][j] = 0;
else shortest[i][j] = 987654321;
}
}
for (int i = 0; i < m; i++) {
st = new StringTokenizer(br.readLine());
int v1 = Integer.parseInt(st.nextToken());
int v2 = Integer.parseInt(st.nextToken());
int w = Integer.parseInt(st.nextToken());
shortest[v1][v2] = w;
}
for (int v1 = 1; v1 < n+1; v1++) {
for (int v2 = 1; v2 < n + 1; v2++) {
for (int v = 1; v < n + 1; v++) {
shortest[v2][v] = Math.min(shortest[v2][v], shortest[v1][v] + shortest[v2][v1]);
}
}
}
int max = 0;
for (int i = 1; i < n + 1; i++) {
if (i == x) continue;
max = Math.max(shortest[i][x] + shortest[x][i], max);
}
System.out.println(max);
}
}
// ๋ค์ต์คํธ๋ผ
public class BOJ_1238_2 {
private static class Vertex {
int v, w;
public Vertex(int v, int w) {
this.v = v;
this.w = w;
}
}
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int n = Integer.parseInt(st.nextToken());
int m = Integer.parseInt(st.nextToken());
int x = Integer.parseInt(st.nextToken());
LinkedList<LinkedList<Vertex>> graph1 = new LinkedList<>();
LinkedList<LinkedList<Vertex>> graph2 = new LinkedList<>();
for (int i = 0; i < n+1; i++) {
graph1.add(new LinkedList<>());
graph2.add(new LinkedList<>());
}
for (int i = 0; i < m; i++) {
st = new StringTokenizer(br.readLine());
int v1 = Integer.parseInt(st.nextToken());
int v2 = Integer.parseInt(st.nextToken());
int w = Integer.parseInt(st.nextToken());
graph1.get(v1).add(new Vertex(v2, w));
graph2.get(v2).add(new Vertex(v1, w));
}
int[] xTov = dijkstra(graph1, x, n);
int[] vTox = dijkstra(graph2, x, n);
int max = Integer.MIN_VALUE;
for (int i = 1; i <= n; i++) max = Math.max(max, xTov[i] + vTox[i]);
System.out.println(max);
}
private static int[] dijkstra(LinkedList<LinkedList<Vertex>> graph, int v, int n) {
int[] shortest = new int[n+1];
Arrays.fill(shortest, 987654321);
shortest[v] = 0;
boolean[] visited = new boolean[n+1];
for (int i = 1; i <= n; i++) {
int minV = 0;
int value = Integer.MAX_VALUE;
for (int j = 1; j <= n; j++) {
if (value > shortest[j] && !visited[j]) {
value = shortest[j];
minV = j;
}
}
visited[minV] = true;
for (Vertex vertex : graph.get(minV)) {
shortest[vertex.v] = Math.min(shortest[vertex.v], shortest[minV] + vertex.w);
}
}
return shortest;
}
}
'์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
1863. ์ค์นด์ด๋ผ์ธ ์ฌ์ด๊ฑฐ (0) | 2025.01.22 |
---|---|
4485. ๋ น์ ์ท ์ ์ ์ ๊ฐ ์ ค๋ค์ง? (0) | 2025.01.19 |
ํ๋ก์ด๋ ์์ ์๊ณ ๋ฆฌ์ฆ (0) | 2025.01.17 |
ํ์ ํธ๋ฆฌ (1) | 2024.10.03 |
16235๋ฒ ๋ฌธ์ ์ ์๊ฐ ์ค์ด๊ธฐ (1) | 2024.09.26 |