관리 메뉴

Partially Committed

[λ°±μ€€ 11404] ν”Œλ‘œμ΄λ“œ λ³Έλ¬Έ

πŸ”₯ Algorithm || λ¬Έμ œν’€μ΄/PS

[λ°±μ€€ 11404] ν”Œλ‘œμ΄λ“œ

WonderJay 2023. 1. 19. 13:54
728x90
λ°˜μ‘ν˜•
SMALL

문제

https://www.acmicpc.net/problem/11404

 

11404번: ν”Œλ‘œμ΄λ“œ

첫째 쀄에 λ„μ‹œμ˜ 개수 n이 주어지고 λ‘˜μ§Έ μ€„μ—λŠ” λ²„μŠ€μ˜ 개수 m이 주어진닀. 그리고 μ…‹μ§Έ 쀄뢀터 m+2μ€„κΉŒμ§€ λ‹€μŒκ³Ό 같은 λ²„μŠ€μ˜ 정보가 주어진닀. λ¨Όμ € μ²˜μŒμ—λŠ” κ·Έ λ²„μŠ€μ˜ 좜발 λ„μ‹œμ˜ λ²ˆν˜Έκ°€

www.acmicpc.net

n(2 ≤ n ≤ 100)개의 λ„μ‹œκ°€ μžˆλ‹€. 그리고 ν•œ λ„μ‹œμ—μ„œ μΆœλ°œν•˜μ—¬ λ‹€λ₯Έ λ„μ‹œμ— λ„μ°©ν•˜λŠ” m(1 ≤ m ≤ 100,000)개의 λ²„μŠ€κ°€ μžˆλ‹€. 각 λ²„μŠ€λŠ” ν•œ 번 μ‚¬μš©ν•  λ•Œ ν•„μš”ν•œ λΉ„μš©μ΄ μžˆλ‹€.

λͺ¨λ“  λ„μ‹œμ˜ 쌍 (A, B)에 λŒ€ν•΄μ„œ λ„μ‹œ Aμ—μ„œ B둜 κ°€λŠ”λ° ν•„μš”ν•œ λΉ„μš©μ˜ μ΅œμ†Ÿκ°’μ„ κ΅¬ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜μ‹œμ˜€.

μž…λ ₯

첫째 쀄에 λ„μ‹œμ˜ 개수 n이 주어지고 λ‘˜μ§Έ μ€„μ—λŠ” λ²„μŠ€μ˜ 개수 m이 주어진닀. 그리고 μ…‹μ§Έ 쀄뢀터 m+2μ€„κΉŒμ§€ λ‹€μŒκ³Ό 같은 λ²„μŠ€μ˜ 정보가 주어진닀. λ¨Όμ € μ²˜μŒμ—λŠ” κ·Έ λ²„μŠ€μ˜ 좜발 λ„μ‹œμ˜ λ²ˆν˜Έκ°€ 주어진닀. λ²„μŠ€μ˜ μ •λ³΄λŠ” λ²„μŠ€μ˜ μ‹œμž‘ λ„μ‹œ a, 도착 λ„μ‹œ b, ν•œ 번 νƒ€λŠ”λ° ν•„μš”ν•œ λΉ„μš© c둜 이루어져 μžˆλ‹€. μ‹œμž‘ λ„μ‹œμ™€ 도착 λ„μ‹œκ°€ 같은 κ²½μš°λŠ” μ—†λ‹€. λΉ„μš©μ€ 100,000보닀 μž‘κ±°λ‚˜ 같은 μžμ—°μˆ˜μ΄λ‹€.

μ‹œμž‘ λ„μ‹œμ™€ 도착 λ„μ‹œλ₯Ό μ—°κ²°ν•˜λŠ” 노선은 ν•˜λ‚˜κ°€ 아닐 수 μžˆλ‹€.

좜λ ₯

n개의 쀄을 좜λ ₯ν•΄μ•Ό ν•œλ‹€. i번째 쀄에 좜λ ₯ν•˜λŠ” j번째 μˆ«μžλŠ” λ„μ‹œ iμ—μ„œ j둜 κ°€λŠ”λ° ν•„μš”ν•œ μ΅œμ†Œ λΉ„μš©μ΄λ‹€. λ§Œμ•½, iμ—μ„œ j둜 갈 수 μ—†λŠ” κ²½μš°μ—λŠ” κ·Έ μžλ¦¬μ— 0을 좜λ ₯ν•œλ‹€.

예제 μž…λ ₯ 1 

5
14
1 2 2
1 3 3
1 4 1
1 5 10
2 4 2
3 4 1
3 5 1
4 5 3
3 5 10
3 1 8
1 4 2
5 1 7
3 4 2
5 2 4

예제 좜λ ₯ 1 

0 2 3 1 4
12 0 15 2 5
8 5 0 1 1
10 7 13 0 3
7 4 10 6 0

μ΅œλ‹¨ 거리λ₯Ό ꡬ해야 ν•˜λŠ”λ° λ…Έλ“œμ˜ κ°œμˆ˜κ°€ μž‘λ‹€(μ΅œλŒ€ 100).

그러면, ν”Œλ‘œμ΄λ“œ - μ›Œμ…œ μ•Œκ³ λ¦¬μ¦˜μœΌλ‘œ 해결이 κ°€λŠ₯ν•˜λ‹€.

ν”Œλ‘œμ΄λ“œ μ›Œμ…œμ€ O(V^3) = O(10^6) 으둜 μ‹œκ°„μ œν•œ (1초) 에 λ„‰λ„‰ν•˜λ‹€.

 

μΆœλ°œμ§€(A)μ—μ„œ 도착지(B)둜 κ°€λŠ” μ΅œλ‹¨ κ²½λ‘œκ°€ μ‘΄μž¬ν•  κ²½μš°μ—,

 

κ·Έ 경둜 사이에 μ‘΄μž¬ν•˜λŠ” K λ…Έλ“œκ°€ μ‘΄μž¬ν•œλ‹€κ³  κ°€μ •ν•˜μ˜€μ„ λ•Œ,

 

A-K-B 경둜 λ˜ν•œ μ΅œλ‹¨ κ²½λ‘œλΌλŠ” 것을 μ΄μš©ν•˜λ©΄ λœλ‹€.

 

μ£Όμ˜ν•΄μ•Ό ν•  점은 Infinite 값을 μΆ©λΆ„νžˆ 크게 ν•΄μ£Όμ–΄μ•Ό ν•œλ‹€λŠ” 것이닀! (λ„ˆλ¬΄ 크면 overflow λ°œμƒ κ°€λŠ₯ν•˜λ‹ˆκΉŒ 쑰심!) 

 

import java.io.*;
import java.util.StringTokenizer;

public class Main {
    static int 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;

        int n = Integer.parseInt(br.readLine()); // λ…Έλ“œ 개수
        int m = Integer.parseInt(br.readLine()); // 에지 개수

        graph = new int[n + 1][n + 1];

        // μ΄ˆκΈ°ν™”
        for (int i = 1; i <= n; i++) {
            for (int j = 1; j <= n; j++) {
                if (i == j)
                    graph[i][j] = 0;
                else
                    graph[i][j] = 10000000;
            }
        }

        for (int i = 0; i < m; i++) {
            stk = new StringTokenizer(br.readLine());
            int st = Integer.parseInt(stk.nextToken());
            int end = Integer.parseInt(stk.nextToken());
            int cost = Integer.parseInt(stk.nextToken());
            if (graph[st][end] > cost)
                graph[st][end] = cost; // μ΄ˆκΈ°ν™”
        }
        // ν”Œλ‘œμ΄λ“œ - μ›Œμ…œ μ•Œκ³ λ¦¬μ¦˜ O(v^3)

        for (int k = 1; k <= n; k++) {
            for (int s = 1; s <= n; s++) {
                for (int e = 1; e <= n; e++) {
                    if (graph[s][e] > graph[s][k] + graph[k][e])
                        graph[s][e] = graph[s][k] + graph[k][e];
                }
            }
        }

        // μ •λ‹΅ 좜λ ₯
        for (int i = 1; i <= n; i++) {
            for (int j = 1; j <= n; j++) {
                if (graph[i][j] == 10000000)
                    bw.write("0 ");
                else
                    bw.write(graph[i][j] + " ");
            }
            bw.write("\n");
        }
        bw.flush();
        bw.close();
    }
}

 

728x90
λ°˜μ‘ν˜•
LIST
Comments