Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 문제풀이
- 알고리즘
- SOH
- Expanding Polytope Algorithm
- 내적
- Vector
- 벡터
- PS
- ubuntu
- 백준
- linux
- 리눅스
- C++
- Unity
- uclidean algorithm
- 분할축 이론
- Doubly Connected Edge List
- 충돌 알고리즘
- 우분투
- 수학
- C
- 유니티
- 외적
- dp
- AABB
- GJK
- Graham Scan
- 보로노이다이어그램
- 다이나믹 프로그래밍
- c#
Archives
- Today
- Total
마이 플밍 블로그
백준 1753 최단경로 본문
분명 알고리즘은 맞는데 왜 틀린건지 모르겠고 몇시간을 고민하다가 드디어 해결방법을 찾았는데
입력 부분에서 반복 횟수를 E번이 아니라 V번으로 해서 틀렸었다
#include<cstdio>
#include<iostream>
#include<queue>
#include <string>
using namespace std;
const int INF = 987654321;
int V, E, K;
vector<pair<int, int>> adj[400000];
vector<int> dijkstra(int src) {
vector<int> dist(V + 1, INF);
dist[src] = 0;
priority_queue<pair<int, int>> pq;
pq.push(make_pair(0, src));
while (!pq.empty()) {
int cost = -pq.top().first;
int here = pq.top().second;
pq.pop();
if (dist[here] < cost) continue;
for (int i = 0; i < adj[here].size(); ++i) {
int there = adj[here][i].first;
int nextDist = cost + adj[here][i].second;
if (dist[there] > nextDist) {
dist[there] = nextDist;
pq.push(make_pair(-nextDist, there));
}
}
}
for (int i = 1; i <= V; i++) {
int dis = dist[i];
if (dis == INF)
cout << "INF" << '\n';
else
cout << dis << '\n';
}
return dist;
}
int main(void) {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
cin >> V >> E;
cin >> K;
for (int i = 0; i < E; i++) {
int u, v, w;
cin >> u >> v >> w;
adj[u].push_back(make_pair(v, w));
}
dijkstra(K);
return 0;
}