https://www.acmicpc.net/problem/1719
λ¬Έμ
λͺ μ°κΈ°μ μ 2008λ λΆν° νλ°° μ¬μ μ μλ‘μ΄ μμνκΈ°λ‘ νμλ€. μ°μ νλ°° νλ¬Όμ λͺ¨μμ μ²λ¦¬νλ μ§νμ₯μ λͺ κ° λ§λ ¨νμ§λ§, νλ°° νλ¬Όμ΄ κ° μ§νμ₯λ€ μ¬μ΄λ₯Ό μ€κ° λ μ΄λ€ κ²½λ‘λ₯Ό κ±°μ³μΌ νλμ§ κ²°μ νμ§ λͺ»νλ€. μ΄λ€ κ²½λ‘λ₯Ό κ±°μΉ μ§ μ ν΄μ, μ΄λ₯Ό κ²½λ‘νλ‘ μ 리νλ κ²μ΄ μ¬λ¬λΆμ΄ ν μΌμ΄λ€.
μμλ κ·Έλνμμ κ΅΅κ² νμλ 1, 2, 3, 4, 5, 6μ μ§νμ₯μ λνλΈλ€. μ μ κ°μ κ°μ μ λ μ§νμ₯κ°μ νλ¬Ό μ΄λμ΄ κ°λ₯ν¨μ λνλ΄λ©°, κ°μ€μΉλ μ΄λμ 걸리λ μκ°μ΄λ€. μ΄λ‘λΆν° μ»μ΄λ΄μΌ νλ κ²½λ‘νλ λ€μκ³Ό κ°λ€.
κ²½λ‘νλ ν μ§νμ₯μμ λ€λ₯Έ μ§νμ₯μΌλ‘ μ΅λ¨κ²½λ‘λ‘ νλ¬Όμ μ΄λμν€κΈ° μν΄ κ°μ₯ λ¨Όμ κ±°μ³μΌ νλ μ§νμ₯μ λνλΈ κ²μ΄λ€. μλ₯Ό λ€μ΄ 4ν 5μ΄μ 6μ 4λ² μ§νμ₯μμ 5λ² μ§νμ₯μΌλ‘ μ΅λ¨ κ²½λ‘λ₯Ό ν΅ν΄ κ°κΈ° μν΄μλ μ μΌ λ¨Όμ 6λ² μ§νμ₯μΌλ‘ μ΄λν΄μΌ νλ€λ μλ―Έμ΄λ€.
μ΄μ κ°μ κ²½λ‘νλ₯Ό ꡬνλ νλ‘κ·Έλ¨μ μμ±νμμ€.
μ λ ₯
첫째 μ€μ λ μ nκ³Ό mμ΄ λΉ μΉΈμ μ¬μ΄μ λκ³ μμλλ‘ μ£Όμ΄μ§λ€. nμ μ§νμ₯μ κ°μλ‘ 200μ΄νμ μμ°μ, mμ μ§νμ₯κ° κ²½λ‘μ κ°μλ‘ 10000μ΄νμ μμ°μμ΄λ€. μ΄μ΄μ ν μ€μ νλμ© μ§νμ₯κ° κ²½λ‘κ° μ£Όμ΄μ§λλ°, λ μ§νμ₯μ λ²νΈμ κ·Έ μ¬μ΄λ₯Ό μ€κ°λλ° νμν μκ°μ΄ μμλλ‘ μ£Όμ΄μ§λ€. μ§νμ₯μ λ²νΈλ€κ³Ό κ²½λ‘μ μμμκ°μ λͺ¨λ 1000μ΄νμ μμ°μμ΄λ€.
μΆλ ₯
μμλ κ²κ³Ό κ°μ νμμ κ²½λ‘νλ₯Ό μΆλ ₯νλ€.
νμ΄
κ°λ₯ν λͺ¨λ μ μ 2κ°μ μ‘°ν©μ λν μ΅λ¨κ²½λ‘λ₯Ό ꡬνκΈ° μν΄ νλ‘μ΄λ-μμ
μκ³ λ¦¬μ¦μ μ΄μ©νλ€.
(νλ‘μ΄λ-μμ
μ DP μ κ·Όμ κΈ°λ°μΌλ‘ νλ ASP μκ³ λ¦¬μ¦μ΄λ€.)
μ΄λ κ·Έλνμ κ°μ€μΉ (λ³Έ λ¬Έμ μμλ 걸리λμκ°) λΏλ§ μλλΌ μ§λκ°λ λ
Έλ(μ§νμ₯) μ λν μ 보λ λ΄μ μ μλλ‘
pair ννλ‘ {κ°μ€μΉ, μ§λλ λ
Έλ} λ₯Ό λ΄μμ£Όμλ€.
// Authored by : seondal
// Co-authored by : -
// #include <bits/stdc++.h>
#include <iostream>
#include <vector>
using namespace std;
typedef pair<int,int> ci;
const int INF = 1e7;
void floydWarshall(int n, vector<vector<ci>>&graph) {
for(int k=1; k<=n; k++) {
for(int i=1; i<=n; i++) {
for(int j=1; j<=n; j++) {
int passK = graph[i][k].first + graph[k][j].first;
if(passK < graph[i][j].first) {
// k μ§νμ₯μ μ§λλ κ²½μ°κ° λ λΉ λ₯Έκ²½μ°
graph[i][j].first = passK;
graph[i][j].second = graph[i][k].second;
}
}
}
}
return;
}
int main() {
ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
int n,m, a,b,t;
cin >> n >> m;
// μ΄κΈ°ν
vector<vector<ci>> graph(n+1, vector<ci>(n+1, {INF,0})); // graph[i][j] = {κ²½λ‘ν¬κΈ°, μ§λλ μ§νμ₯}
for(int i=1; i<=n; i++)
graph[i][i] = {0, 0}; // iμμ iλ‘ κ°λλ 0μκ°μ΄ κ±Έλ¦¬κ³ μ§νμ₯μ μ§λμ§ μμ(0)
// μ
λ ₯
while(m--) {
cin >> a >> b >> t;
// aμμ bλ‘ κ°λ tμκ°μ΄ κ±Έλ¦¬κ³ μ§νμ₯ bλ₯Ό μ§λ¨
graph[a][b] = {t, b};
graph[b][a] = {t, a};
}
// μ°μ°
floydWarshall(n, graph);
// μΆλ ₯
for(int i=1; i<=n; i++) {
for(int j=1; j<=n; j++){
if(graph[i][j].second == 0)
cout << "- ";
else
cout << graph[i][j].second << " ";
}
cout << "\n";
}
return 0;
}
/*
*/
'ποΈ ICPC Sinchon > Shortest Path' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[BOJ G3][C++] λ°±μ€ 1865λ²: μν (0) | 2022.11.03 |
---|---|
λ°±μ€ 11657λ²: νμλ¨Έμ (0) | 2022.11.03 |
λ°±μ€ 11404λ²: νλ‘μ΄λ (0) | 2022.11.03 |
[BOJ G4][C++] λ°±μ€ 10282λ²: ν΄νΉ (0) | 2022.11.01 |
λ°±μ€ 1753λ²: μ΅λ¨κ²½λ‘ (0) | 2022.11.01 |