๋์ด๋ : ๊ณจ๋ 5
๊ฑธ๋ฆฐ ์๊ฐ : 1์๊ฐ ๋ฐ ์ด์ (์ค๋ฅ ์ฐพ๊ธฐ)
๋ฌธ์
์ต๋จ๊ฒฝ๋ก ๋ฌธ์ ๋ฐ๋ก๊ฐ๊ธฐ
ํ์ด
- ๋ค์ต์คํธ๋ผ ๊ธฐ๋ณธ ๊ตฌํ์ ์ด์ฉํด์ ํผ๋ค.
- ๋ค์ต์คํธ๋ผ ๊ฐ๋ ๋ฐ๋ก๊ฐ๊ธฐ
์ฝ๋
#include <iostream>
#include <vector>
#include <queue>
using namespace std;
int main() {
// ์
๋ ฅ
// v, e๋ 10^5, 10^6์ดํ
int V; int E;
cin >> V >> E;
int start; // ์์ ์ ์
cin >> start;
vector<vector<pair<int, int>>> edge(V+1, vector<pair<int,int>>(0));
for (int i = 0; i < E; i++) { //10^6
int from; int to; int val;
cin >> from >> to >> val;
edge[from].push_back(make_pair(to, val));
}
vector<int> memo(V+1, 1e9);
vector<int> visited(V + 1, 0);
priority_queue<pair<int, int>> que; // ์ฃผ๋ณ ๋
ธ๋์ ๋ํ ๊ฐ์ ์ ํฌ๊ธฐ ์ ์ง (val, to)
memo[start] = 0;
que.push(make_pair(0,start));
while (que.size()!=0) {
auto node = que.top(); que.pop(); // ๊ฐ์ฅ ๊ฐ์ค์น ๋ฎ์ ์์ด ๋ฐ๋ ค์ค๊ธฐ
int val = -node.first; int from = node.second;
if (visited[from]!=0) { // ์ด๋ฏธ tree์ ํฌํจ๋ ๋
ธ๋์ด๋ฉด ๋ค์ ํ์ง x
continue;
}
visited[from] = 1;
auto nodeEdge = edge[from];
for (int i = 0; i < nodeEdge.size(); i++) {
int to = nodeEdge[i].first; int val2 = nodeEdge[i].second;
if (memo[to] > memo[from] + val2) {
memo[to] = memo[from] + val2;
que.push(make_pair(-memo[to], to)); // -๋ก ์ง์ด๋ฃ์ด์ ์ต์๊ฐ์ด ๋์ค๊ฒ ํ๊ธฐ
}
}
}
for (int i = 1; i < V+1; i++) {
if (memo[i] == 1e9) {
cout << "INF";
}
else {
cout << memo[i];
}
cout << '\n'; // ์ฌ๊ธฐ๋ฅผ endl๋ก ํ๋ฉด ์๊ฐ ์ด๊ณผ..
}
}
๊ฒฐ๊ณผ
๋ง์ง๋ง ์ถ๋ ฅ ์ endl์ ์ฌ์ฉํ๋ฉด ์๊ฐ์ด๊ณผ๊ฐ ๋ฌ๋ค. '\n'์ ์ฌ์ฉํ์..
๋ฐฑ์ค judge๋ ์ ์ถ๋ ฅ ์๊ฐ๋ ํฌํจํ๋ฉฐ endl์ ์ถ๋ ฅ๋ฒํผ๋ฅผ ๋น์์ผํด์ ๋๋ฆฌ๋ค๊ณ ํ๋ค.
๋ฐ์ํ
'Algorithm ๋ฌธ์ > BOJ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[c++] BOJ 1915 :: ๊ฐ์ฅ ํฐ ์ ์ฌ๊ฐํ (0) | 2021.04.12 |
---|---|
[c++] BOJ 1947 :: ์์ฌ์์ด ํ๋ค (0) | 2021.04.06 |
[c++] BOJ 1005 :: ACM Craft (0) | 2021.03.21 |
[c++] BOJ 2225 :: ํฉ๋ถํด (0) | 2021.03.21 |
[c++] BOJ 1149 :: RGB๊ฑฐ๋ฆฌ (0) | 2021.03.12 |
Comment