๐ค๋ฌธ์ ์ดํด
๋ง์ ๊ฑฐ์ฐฝํ์ง๋ง ์ ํ์ ์ธ ๋ค์ต์คํธ๋ผ ๋ฌธ์ ์ ๋ฐฉ๋ฌธํ ์ ์๋ ๊ตฌ๊ฐ์ด ์กด์ฌํ๋ค๋ ๊ฒ๋ง ์ถ๊ฐ๋ ๋ฌธ์ ์ด๋ค.
๐ฅํ์ด๐ฅ
๋ค์ต์คํธ๋ผ๋ก ๊ตฌํ์ ํ๊ณ ์๋์ ์์ผ์ ๋ณด์ด๋ ๋ถ๊ธฐ์ ์ ๋ฐฉ๋ฌธํ์ง ์๋๋ก ํด์ฃผ๊ธฐ๋ง ํ๋ฉด ๋๋ค. ๋ฅ์์ค์ ๊ฒฝ์ฐ๋ ์์ผ๊ฐ ๋ณด์ด์ง๋ง ๊ฐ ์ ์์ด์ผ ํ๋ฏ๋ก ๋ฐ๋ก 0์ผ๋ก ์ฒ๋ฆฌํด์ฃผ์๋ค.
#include <iostream>
#include <vector>
#include <queue>
using namespace std;
#define INF 10000000000
int n, m, a, b, t;
bool sight[100001];
vector<vector<pair<int, int>>> edge(100001);
long long dist[100001];
int main() {
cin.tie(nullptr);
cout.tie(nullptr);
ios::sync_with_stdio(false);
cin >> n >> m;
for (int i = 0; i < n; i++) {
cin >> sight[i];
if (i == n - 1) sight[i] = false;
}
for (int i = 0; i < m; i++) {
cin >> a >> b >> t;
edge[a].push_back({b, t});
edge[b].push_back({a, t});
}
for (int i = 0; i < n; i++) {
dist[i] = INF;
}
dist[0] = 0;
priority_queue<pair<long long, int>> pq;
pq.push({0, 0});
while (!pq.empty()) {
int now = pq.top().second;
long long time = -pq.top().first;
pq.pop();
if (dist[now] < time) continue;
dist[now] = time;
for (auto x: edge[now]) {
long long next_time = time + x.second;
int next = x.first;
if (sight[next]) continue;
if (dist[next] <= next_time) continue;
dist[next] = next_time;
pq.push({-next_time, next});
}
}
if (dist[n - 1] == INF) cout << -1 << "\n";
else cout << dist[n - 1] << "\n";
}
728x90
'๋ฐฑ์ค > C++' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค/C++] 15927๋ฒ ํ๋ฌธ์ ํ๋ฌธ์๋์ผ!! (0) | 2022.11.15 |
---|---|
[๋ฐฑ์ค/C++] 11656๋ฒ ์ ๋ฏธ์ฌ ๋ฐฐ์ด (0) | 2022.11.14 |
[๋ฐฑ์ค/C++] 20040๋ฒ ์ฌ์ดํด ๊ฒ์ (0) | 2022.11.03 |
[๋ฐฑ์ค/C++] 17404๋ฒ RGB๊ฑฐ๋ฆฌ 2 (0) | 2022.11.02 |
[๋ฐฑ์ค/C++] 4889๋ฒ ์์ ์ ์ธ ๋ฌธ์์ด (0) | 2022.10.27 |