νΉμ ν μ΅λ¨ κ²½λ‘ μ±κ³΅
1 μ΄ 256 MB 55090 13810 9328 24.562% λ¬Έμ
λ°©ν₯μ±μ΄ μλ κ·Έλνκ° μ£Όμ΄μ§λ€. μΈμ€μ΄λ 1λ² μ μ μμ Nλ² μ μ μΌλ‘ μ΅λ¨ κ±°λ¦¬λ‘ μ΄λνλ €κ³ νλ€. λν μΈμ€μ΄λ λ κ°μ§ 쑰건μ λ§μ‘±νλ©΄μ μ΄λνλ νΉμ ν μ΅λ¨ κ²½λ‘λ₯Ό ꡬνκ³ μΆμλ°, κ·Έκ²μ λ°λ‘ μμλ‘ μ£Όμ΄μ§ λ μ μ μ λ°λμ ν΅κ³Όν΄μΌ νλ€λ κ²μ΄λ€.
μΈμ€μ΄λ νλ² μ΄λνλ μ μ μ λ¬Όλ‘ , νλ² μ΄λνλ κ°μ λ λ€μ μ΄λν μ μλ€. νμ§λ§ λ°λμ μ΅λ¨ κ²½λ‘λ‘ μ΄λν΄μΌ νλ€λ μ¬μ€μ μ£ΌμνλΌ. 1λ² μ μ μμ Nλ² μ μ μΌλ‘ μ΄λν λ, μ£Όμ΄μ§ λ μ μ μ λ°λμ κ±°μΉλ©΄μ μ΅λ¨ κ²½λ‘λ‘ μ΄λνλ νλ‘κ·Έλ¨μ μμ±νμμ€.
μ λ ₯
첫째 μ€μ μ μ μ κ°μ Nκ³Ό κ°μ μ κ°μ Eκ° μ£Όμ΄μ§λ€. (2 ≤ N ≤ 800, 0 ≤ E ≤ 200,000) λμ§Έ μ€λΆν° Eκ°μ μ€μ κ±Έμ³μ μΈ κ°μ μ μ a, b, cκ° μ£Όμ΄μ§λλ°, aλ² μ μ μμ bλ² μ μ κΉμ§ μλ°©ν₯ κΈΈμ΄ μ‘΄μ¬νλ©°, κ·Έ κ±°λ¦¬κ° cλΌλ λ»μ΄λ€. (1 ≤ c ≤ 1,000) λ€μ μ€μλ λ°λμ κ±°μ³μΌ νλ λ κ°μ μλ‘ λ€λ₯Έ μ μ λ²νΈ v1κ³Ό v2κ° μ£Όμ΄μ§λ€. (v1 ≠ v2, v1 ≠ N, v2 ≠ 1) μμμ λ μ μ uμ vμ¬μ΄μλ κ°μ μ΄ μ΅λ 1κ° μ‘΄μ¬νλ€.
μΆλ ₯
첫째 μ€μ λ κ°μ μ μ μ μ§λλ μ΅λ¨ κ²½λ‘μ κΈΈμ΄λ₯Ό μΆλ ₯νλ€. κ·Έλ¬ν κ²½λ‘κ° μμ λμλ -1μ μΆλ ₯νλ€.
μμ μ λ ₯ 1 볡μ¬
4 6 1 2 3 2 3 3 3 4 1 1 3 5 2 4 5 1 4 4 2 3
μμ μΆλ ₯ 1 볡μ¬
7β
μ΅λ¨κ±°λ¦¬ λ¬Έμ μ΄λ€.
1 -> v1 -> v2 -> N, 1 -> v2 -> v1 -> N μ€ μ΅μκ°μ΄ λ΅μ΄ λλ€λ κ²μ κΈλ°© μ΄ν΄λλλ°, νλ‘μ΄λλ‘λ μ κ³μ ν리λμ§ μ΄ν΄κ° μ μκ°λ€.
μ΄λνλ κ°μ μ λ€μ μ§λλ κ²½μ°λ case1μμλ v2μμ Nμ λͺ»κ°λ κ²½μ°μλ§ ν΄λΉνλκ² μλκ°, κ·Έλ λ€λ©΄ κ·Έλ° κ²½μ°μλ νλ‘μ΄λ κ²½μ°μ μ΅λ¨κ±°λ¦¬κ° INFκ° λλ―λ‘ INFμΌ κ²½μ°μ λ€μ 체ν¬ν΄μ€μ 1 -> v1 -> v2 -> v1 -> Nμ΄ λκ³ , μ΄ κ²½μ°λ κ²°κ΅
1 -> v2 -> v1 -> Nμ΄ λλλ° , μ΄λ¬λ©΄ νλ‘μ΄λλ₯Ό μ¬μ©ν΄λ λ κ±°κ°μλ° μ λͺ¨λ₯΄κ² λ€.
λ€μ΅μ€νΈλΌ 3λ²λλ €μ νμλ€.
#include <iostream>
#include <queue>
#include <vector>
#include <algorithm>
#define INF 987654321
using namespace std;
int N, E, v1, v2, ans;
vector<vector<pair<int,int>>>graph(1000);
int dijstra(int start, int last){
vector<int>dist(N+1, INF);
priority_queue<pair<int,int>, vector<pair<int,int>>, greater<>> pq;
dist[start] = 0;
pq.push({0, start});
while(!pq.empty()){
int cur_dist = pq.top().first;
int cur_node = pq.top().second;
pq.pop();
for(int i=0; i<graph[cur_node].size(); i++){
int nxt_node = graph[cur_node][i].first;
int nxt_dist = cur_dist + graph[cur_node][i].second;
if(nxt_dist < dist[nxt_node]){
dist[nxt_node] = nxt_dist;
pq.push({nxt_dist, nxt_node});
}
}
}
// for(int i=1; i<=N; i++){
// cout<<dist[i]<<' ';
// }
return dist[last];
}
int main(){
cin>>N>>E;
for(int i=0; i<E; i++){
int a, b, c;
cin>>a>>b>>c;
graph[a].push_back({b,c});
graph[b].push_back({a,c});
}
cin>>v1>>v2;
ans = min(dijstra(1,v1)+dijstra(v1,v2)+dijstra(v2,N),dijstra(1,v2)+dijstra(v1,v2)+dijstra(v1,N) );
// cout<<dijstra(1,v2)<<' '<<dijstra(v1,v2)<<' '<<dijstra(v1,N)<<endl;
if(ans >= INF || ans <= 0) cout<<-1;
else cout<<ans;
}
'algorithm' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
BOJ 1967 (1) | 2022.09.25 |
---|---|
BOJ 1238 (0) | 2022.09.17 |
BOJ 1753 (Dijkstra) (0) | 2022.09.15 |
programmers μμ (0) | 2022.08.14 |
BOJ 10986 (0) | 2022.07.09 |