어흥
[백준 5972] 택배 배송 (C++) 본문
728x90
반응형
문제 링크: https://www.acmicpc.net/problem/5972
1. 주의할 점
- 다익스트라 알고리즘에 대해 알고 있어야 한다
2. 구현
- 1번 Node부터 각 Node까지의 거리를 MAX로 초기화한다
- 간선에 대한 정보를 V[] 벡터에 담는다
- 우선순위큐를 사용하여 다익스트라 알고리즘을 구현한다
#define MAX 987654321
#include <iostream>
#include <algorithm>
#include <vector>
#include <queue>
using namespace std;
struct info{
int idx,val;
};
struct cmp{
bool operator()(info &a, info &b){
return a.val > b.val;
}
};
vector<info> v[50001];
int node, edge,a,b,val,result;
int dist[50001];
int main() {
ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
cin>>node>>edge;
//초기화
for(int i=1;i<=node;i++)
dist[i]=MAX;
for(int i=0;i<edge;i++){
cin>>a>>b>>val;
v[a].push_back({b,val});
v[b].push_back({a,val});
}
priority_queue<info,vector<info>,cmp> pq;
dist[1]=0;
pq.push({1,0});
while(!pq.empty()){
int cidx = pq.top().idx;
int cv = pq.top().val;
pq.pop();
if(cidx==node){
result=cv;
break;
}
for(int i=0;i<v[cidx].size();i++){
int next = v[cidx][i].idx;
int nv = v[cidx][i].val;
if(dist[next]>cv+nv){
dist[next]=cv+nv;
pq.push({next,cv+nv});
}
}
}
cout<<result;
return 0;
}
728x90
반응형
'알고리즘 > 백준' 카테고리의 다른 글
[백준 19538] 루머 (C++) (0) | 2021.12.24 |
---|---|
[백준 16118] 달빛 여우 (C++) (0) | 2021.12.20 |
[백준 18235] 지금 만나러 갑니다 (C++) (0) | 2021.12.02 |
[백준 21611] 마법사 상어와 블리자드 (C++) (0) | 2021.10.23 |
[백준 21610] 마법사 상어와 비바라기 (C++) (0) | 2021.10.20 |
Comments