```cpp
#include
#include
#include
#include
#include
using namespace std;
// 12:16
//다익스트라
// 산봉우리 여러개 어떻게 -? 산봉우리 하나마다 다익스트라? 50000개인데? -> 한번에 끝내기?
#define MAX 10000001
vectordist(50001,MAX); //[i] i번째에서 봉우리에서 최대 intensity
bool visit[50001];
vector>graph[50001]; //연결 저장
vector answer;
setgates;
setsummits;
priority_queue>>q;
//intensity , <봉우리, 현재 노드>
// 다익스트라 -> 가장 비용이 적은(가중치가 작은) 노드 먼저 , 왜냐면 최소 경로를 찾기 떄문
// -> 경로의 비용은 intensity로 대체
// -> 더 작은 intensity를 가지고 그 노드를 방문할 일이 없다
void dijkstra(){
while(!q.empty()){
int d = -q.top().first;
int sum = q.top().second.first;
int cur = q.top().second.second;
q.pop();
//문에 도착했다면 답을 갱신해주고(더 작다면) 탐색 끝
if(gates.find(cur)!=gates.end()){
dist[sum] = min(dist[sum],d);
continue;
}
//방문한 노드는 방문 x
if(visit[cur])
continue;
visit[cur] =true;
for(int i=0;idist[sum])
continue;
q.push({-cost,{sum,node}});
}
}
}
vector solution(int n, vector> paths, vector _gates, vector _summits) {
answer.resize(2);
answer[1] = 10000001;
int a=0,b=0,w=0;
for(int i=0;i
코멘트
- 우선순위큐를 사용안해서 오래걸렸네요. 원래 다익스트라는 각 노드까지 거리를 저장하는데 그러면 용량이 오버되서 (dist[50001][50001]) 어떻게 intensity를 저장할 수 있을까를 생각하는게 어려웠던것 같습니다. 시작노드가 여러개라..
- set 활용법 좀 까먹었었네요. find 기억하기..
🔗 등산코스 정하기