https://www.acmicpc.net/problem/10282
๋ฌธ์
์ตํ์ต์ ์ ํด์ปค yum3์ด ๋คํธ์ํฌ ์์ค์ ํ ์ปดํจํฐ๋ฅผ ํดํนํ๋ค! ์ด์ ์๋ก์ ์์กดํ๋ ์ปดํจํฐ๋ค์ ์ ์ฐจ ํ๋๋ ์ ์ผ๋๊ธฐ ์์ํ๋ค. ์ด๋ค ์ปดํจํฐ a๊ฐ ๋ค๋ฅธ ์ปดํจํฐ b์ ์์กดํ๋ค๋ฉด, b๊ฐ ๊ฐ์ผ๋๋ฉด ๊ทธ๋ก๋ถํฐ ์ผ์ ์๊ฐ ๋ค a๋ ๊ฐ์ผ๋๊ณ ๋ง๋ค. ์ด๋ b๊ฐ a๋ฅผ ์์กดํ์ง ์๋๋ค๋ฉด, a๊ฐ ๊ฐ์ผ๋๋๋ผ๋ b๋ ์์ ํ๋ค.
์ตํ์ต์ ์ ํด์ปค yum3์ด ํดํนํ ์ปดํจํฐ ๋ฒํธ์ ๊ฐ ์์กด์ฑ์ด ์ฃผ์ด์ง ๋, ํดํน๋นํ ์ปดํจํฐ๊น์ง ํฌํจํ์ฌ ์ด ๋ช ๋์ ์ปดํจํฐ๊ฐ ๊ฐ์ผ๋๋ฉฐ ๊ทธ์ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ด ์ผ๋ง์ธ์ง ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ ํ ์คํธ ์ผ์ด์ค์ ๊ฐ์๊ฐ ์ฃผ์ด์ง๋ค. ํ ์คํธ ์ผ์ด์ค์ ๊ฐ์๋ ์ต๋ 100๊ฐ์ด๋ค. ๊ฐ ํ ์คํธ ์ผ์ด์ค๋ ๋ค์๊ณผ ๊ฐ์ด ์ด๋ฃจ์ด์ ธ ์๋ค.
- ์ฒซ์งธ ์ค์ ์ปดํจํฐ ๊ฐ์ n, ์์กด์ฑ ๊ฐ์ d, ํดํน๋นํ ์ปดํจํฐ์ ๋ฒํธ c๊ฐ ์ฃผ์ด์ง๋ค(1 ≤ n ≤ 10,000, 1 ≤ d ≤ 100,000, 1 ≤ c ≤ n).
- ์ด์ด์ d๊ฐ์ ์ค์ ๊ฐ ์์กด์ฑ์ ๋ํ๋ด๋ ์ ์ a, b, s๊ฐ ์ฃผ์ด์ง๋ค(1 ≤ a, b ≤ n, a ≠ b, 0 ≤ s ≤ 1,000). ์ด๋ ์ปดํจํฐ a๊ฐ ์ปดํจํฐ b๋ฅผ ์์กดํ๋ฉฐ, ์ปดํจํฐ b๊ฐ ๊ฐ์ผ๋๋ฉด s์ด ํ ์ปดํจํฐ a๋ ๊ฐ์ผ๋จ์ ๋ปํ๋ค.
๊ฐ ํ ์คํธ ์ผ์ด์ค์์ ๊ฐ์ ์์กด์ฑ (a, b)๊ฐ ๋ ๋ฒ ์ด์ ์กด์ฌํ์ง ์๋๋ค.
์ถ๋ ฅ
๊ฐ ํ ์คํธ ์ผ์ด์ค๋ง๋ค ํ ์ค์ ๊ฑธ์ณ ์ด ๊ฐ์ผ๋๋ ์ปดํจํฐ ์, ๋ง์ง๋ง ์ปดํจํฐ๊ฐ ๊ฐ์ผ๋๊ธฐ๊น์ง ๊ฑธ๋ฆฌ๋ ์๊ฐ์ ๊ณต๋ฐฑ์ผ๋ก ๊ตฌ๋ถ์ง์ด ์ถ๋ ฅํ๋ค.
ํ์ด
// Authored by : seondal
// Co-authored by : -
// #include <bits/stdc++.h>
#include <iostream>
#include <vector>
#include <queue>
using namespace std;
typedef pair<int, int> ci;
const int INF = 100000000;
ci dijkstra(int start, int n, vector<vector<ci>>&graph) {
vector<int> dist(n+1, INF); // dist[i]: i๋ฒ ์ปดํจํฐ๊ฐ ๊ฐ์ผ๋๋๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ
priority_queue<ci, vector<ci>, greater<>> pq; // {์ ์ , ์์์ ๋ถํฐ๊ฑฐ๋ฆฌ}
// ์์ ์ ์ ์ด๊ธฐํ
dist[start] = 0;
pq.push({start, 0});
while(!pq.empty()) {
int node = pq.top().first;
int weight = pq.top().second;
pq.pop();
if(weight > dist[node])
continue;
// ํ์ํ๋ ค๋ ๋
ธ๋์ ์ฐ๊ฒฐ๋ ๋
ธ๋๋ค ํ์
for(int i=0; i<graph[node].size(); i++) {
int next_node = graph[node][i].first;
int next_weight = weight + graph[node][i].second;
if(next_weight < dist[next_node]) {
dist[next_node] = next_weight;
pq.push({next_node, next_weight});
}
}
}
// ๊ฐ์ผ๋ ์ปดํจํฐ ์์ ์๊ฐ ๊ตฌํ๊ธฐ
int hacked=0, time=0;
for(int i=0; i<n+1; i++) {
if(dist[i] == INF)
continue;
hacked++;
time = max(dist[i], time);
// ๊ฐ์ผ๋ ์ ์๋ ๋ชจ๋ ์ปดํจํฐ๊ฐ ๊ฐ์ผ๋๋๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ INF๋ฅผ ์ ์ธํ ์ต๋๊ฐ
}
return {hacked, time};
}
int main() {
ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
int t, n,d,c, a,b,s;
cin >> t;
while(t--){
cin >> n >> d >> c;
vector<vector<ci>> graph(n+1); // graph[b]=[{a,s}]: ์ปดํจํฐb๊ฐ ๊ฐ์ผ๋๋ฉด s์ด ํ a๋ ๊ฐ์ผ
for(int i=0; i<d; i++) {
cin >> a >> b >> s;
graph[b].push_back({a,s});
}
ci ans = dijkstra(c, n, graph);
cout << ans.first << " " << ans.second << "\n";
}
return 0;
}
/*
*/
'๐๏ธ ICPC Sinchon > Shortest Path' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BOJ G3][C++] ๋ฐฑ์ค 1865๋ฒ: ์ํ (0) | 2022.11.03 |
---|---|
๋ฐฑ์ค 11657๋ฒ: ํ์๋จธ์ (0) | 2022.11.03 |
[BOJ G4][C++] ๋ฐฑ์ค 1719๋ฒ: ํ๋ฐฐ (0) | 2022.11.03 |
๋ฐฑ์ค 11404๋ฒ: ํ๋ก์ด๋ (0) | 2022.11.03 |
๋ฐฑ์ค 1753๋ฒ: ์ต๋จ๊ฒฝ๋ก (0) | 2022.11.01 |