๐งจ ๋ฐฑ์ค 10282๋ฒ - ํดํน
๋ฌธ์ ๋์ด๋ : ๊ณจ๋4
๋ฌธ์ ๋งํฌ : www.acmicpc.net/problem/10282
๐งจ ์๊ณ ๋ฆฌ์ฆ ์ ํ ๋ฐ C++ ์ฝ๋
#include <iostream>
#include <set>
#include <vector>
#include <algorithm>
#include <climits>
using namespace std;
struct edge { int to, length; };
int cnt = 0;
int dijkstra(const vector<vector<edge>>& graph, int source, int target) {
vector<int> min_distance(graph.size(), INT_MAX);
min_distance[source] = 0;
set<pair<int, int>> active_vertices;
active_vertices.insert(make_pair(0, source));
cnt = 0;
int where = 0;
while (!active_vertices.empty()) {
where = active_vertices.begin()->second;
cnt++;
active_vertices.erase(active_vertices.begin());
for (auto ed : graph[where]) {
if (min_distance[ed.to] > min_distance[where] + ed.length) {
active_vertices.erase(make_pair(min_distance[ed.to], ed.to));
min_distance[ed.to] = min_distance[where] + ed.length;
active_vertices.insert(make_pair(min_distance[ed.to], ed.to));
}
}
}
return min_distance[where];
}
int main() {
int test;
cin >> test;
for (int t = 0; t < test; t++) {
int n, d, c;
cin >> n >> d >> c;
vector<vector<edge>> graph(10001);
for (int i = 0; i < d; i++) {
int a, b, s;
cin >> a >> b >> s;
graph[b].push_back({ a, s }); // ์ ํฅ๊ทธ๋ํ
}
int result = dijkstra(graph, c, n);
cout << cnt << " " << result << "\n";
}
}
'Problem Solving > BOJ ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[CodeUp] Python ๊ธฐ์ด 100์ ํ์ด ํ๊ธฐ ๋ฐ ๊ฐ๋จํ ํ์ด์ฌ ๋ฌธ๋ฒ ์ ๋ฆฌ (0) | 2021.05.08 |
---|---|
[BOJ] ๋ฐฑ์ค 9370๋ฒ ๋ฏธํ์ธ ๋์ฐฉ์ง (C++ ์ฝ๋) (0) | 2021.02.06 |
[BOJ] ๋ฐฑ์ค 1707๋ฒ ์ด๋ถ๊ทธ๋ํ (C++ ์ฝ๋) (0) | 2021.01.24 |
[BOJ] ๋ฐฑ์ค 10026๋ฒ ์ ๋ก์์ฝ (C++ ์ฝ๋) (0) | 2021.01.23 |
[BOJ] ๋ฐฑ์ค 1012๋ฒ ์ ๊ธฐ๋ ๋ฐฐ์ถ (C++ ์ฝ๋) (0) | 2021.01.23 |