ํน์ ํ ์ต๋จ ๊ฒฝ๋ก ์ฑ๊ณต
1 ์ด 256 MB 55090 13810 9328 24.562% ๋ฌธ์
๋ฐฉํฅ์ฑ์ด ์๋ ๊ทธ๋ํ๊ฐ ์ฃผ์ด์ง๋ค. ์ธ์ค์ด๋ 1๋ฒ ์ ์ ์์ N๋ฒ ์ ์ ์ผ๋ก ์ต๋จ ๊ฑฐ๋ฆฌ๋ก ์ด๋ํ๋ ค๊ณ ํ๋ค. ๋ํ ์ธ์ค์ด๋ ๋ ๊ฐ์ง ์กฐ๊ฑด์ ๋ง์กฑํ๋ฉด์ ์ด๋ํ๋ ํน์ ํ ์ต๋จ ๊ฒฝ๋ก๋ฅผ ๊ตฌํ๊ณ ์ถ์๋ฐ, ๊ทธ๊ฒ์ ๋ฐ๋ก ์์๋ก ์ฃผ์ด์ง ๋ ์ ์ ์ ๋ฐ๋์ ํต๊ณผํด์ผ ํ๋ค๋ ๊ฒ์ด๋ค.
์ธ์ค์ด๋ ํ๋ฒ ์ด๋ํ๋ ์ ์ ์ ๋ฌผ๋ก , ํ๋ฒ ์ด๋ํ๋ ๊ฐ์ ๋ ๋ค์ ์ด๋ํ ์ ์๋ค. ํ์ง๋ง ๋ฐ๋์ ์ต๋จ ๊ฒฝ๋ก๋ก ์ด๋ํด์ผ ํ๋ค๋ ์ฌ์ค์ ์ฃผ์ํ๋ผ. 1๋ฒ ์ ์ ์์ N๋ฒ ์ ์ ์ผ๋ก ์ด๋ํ ๋, ์ฃผ์ด์ง ๋ ์ ์ ์ ๋ฐ๋์ ๊ฑฐ์น๋ฉด์ ์ต๋จ ๊ฒฝ๋ก๋ก ์ด๋ํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ ์ ์ ์ ๊ฐ์ N๊ณผ ๊ฐ์ ์ ๊ฐ์ E๊ฐ ์ฃผ์ด์ง๋ค. (2 โค N โค 800, 0 โค E โค 200,000) ๋์งธ ์ค๋ถํฐ E๊ฐ์ ์ค์ ๊ฑธ์ณ์ ์ธ ๊ฐ์ ์ ์ a, b, c๊ฐ ์ฃผ์ด์ง๋๋ฐ, a๋ฒ ์ ์ ์์ b๋ฒ ์ ์ ๊น์ง ์๋ฐฉํฅ ๊ธธ์ด ์กด์ฌํ๋ฉฐ, ๊ทธ ๊ฑฐ๋ฆฌ๊ฐ c๋ผ๋ ๋ป์ด๋ค. (1 โค c โค 1,000) ๋ค์ ์ค์๋ ๋ฐ๋์ ๊ฑฐ์ณ์ผ ํ๋ ๋ ๊ฐ์ ์๋ก ๋ค๋ฅธ ์ ์ ๋ฒํธ v1๊ณผ v2๊ฐ ์ฃผ์ด์ง๋ค. (v1 โ v2, v1 โ N, v2 โ 1) ์์์ ๋ ์ ์ u์ v์ฌ์ด์๋ ๊ฐ์ ์ด ์ต๋ 1๊ฐ ์กด์ฌํ๋ค.
์ถ๋ ฅ
์ฒซ์งธ ์ค์ ๋ ๊ฐ์ ์ ์ ์ ์ง๋๋ ์ต๋จ ๊ฒฝ๋ก์ ๊ธธ์ด๋ฅผ ์ถ๋ ฅํ๋ค. ๊ทธ๋ฌํ ๊ฒฝ๋ก๊ฐ ์์ ๋์๋ -1์ ์ถ๋ ฅํ๋ค.
์์ ์ ๋ ฅ 1 ๋ณต์ฌ
4 6 1 2 3 2 3 3 3 4 1 1 3 5 2 4 5 1 4 4 2 3
์์ ์ถ๋ ฅ 1 ๋ณต์ฌ
7โ
์ต๋จ๊ฑฐ๋ฆฌ ๋ฌธ์ ์ด๋ค.
1 -> v1 -> v2 -> N, 1 -> v2 -> v1 -> N ์ค ์ต์๊ฐ์ด ๋ต์ด ๋๋ค๋ ๊ฒ์ ๊ธ๋ฐฉ ์ดํด๋๋๋ฐ, ํ๋ก์ด๋๋ก๋ ์ ๊ณ์ ํ๋ฆฌ๋์ง ์ดํด๊ฐ ์ ์๊ฐ๋ค.
์ด๋ํ๋ ๊ฐ์ ์ ๋ค์ ์ง๋๋ ๊ฒฝ์ฐ๋ case1์์๋ v2์์ N์ ๋ชป๊ฐ๋ ๊ฒฝ์ฐ์๋ง ํด๋นํ๋๊ฒ ์๋๊ฐ, ๊ทธ๋ ๋ค๋ฉด ๊ทธ๋ฐ ๊ฒฝ์ฐ์๋ ํ๋ก์ด๋ ๊ฒฝ์ฐ์ ์ต๋จ๊ฑฐ๋ฆฌ๊ฐ INF๊ฐ ๋๋ฏ๋ก INF์ผ ๊ฒฝ์ฐ์ ๋ค์ ์ฒดํฌํด์ค์ 1 -> v1 -> v2 -> v1 -> N์ด ๋๊ณ , ์ด ๊ฒฝ์ฐ๋ ๊ฒฐ๊ตญ
1 -> v2 -> v1 -> N์ด ๋๋๋ฐ , ์ด๋ฌ๋ฉด ํ๋ก์ด๋๋ฅผ ์ฌ์ฉํด๋ ๋ ๊ฑฐ๊ฐ์๋ฐ ์ ๋ชจ๋ฅด๊ฒ ๋ค.
๋ค์ต์คํธ๋ผ 3๋ฒ๋๋ ค์ ํ์๋ค.
#include <iostream>
#include <queue>
#include <vector>
#include <algorithm>
#define INF 987654321
using namespace std;
int N, E, v1, v2, ans;
vector<vector<pair<int,int>>>graph(1000);
int dijstra(int start, int last){
vector<int>dist(N+1, INF);
priority_queue<pair<int,int>, vector<pair<int,int>>, greater<>> pq;
dist[start] = 0;
pq.push({0, start});
while(!pq.empty()){
int cur_dist = pq.top().first;
int cur_node = pq.top().second;
pq.pop();
for(int i=0; i<graph[cur_node].size(); i++){
int nxt_node = graph[cur_node][i].first;
int nxt_dist = cur_dist + graph[cur_node][i].second;
if(nxt_dist < dist[nxt_node]){
dist[nxt_node] = nxt_dist;
pq.push({nxt_dist, nxt_node});
}
}
}
// for(int i=1; i<=N; i++){
// cout<<dist[i]<<' ';
// }
return dist[last];
}
int main(){
cin>>N>>E;
for(int i=0; i<E; i++){
int a, b, c;
cin>>a>>b>>c;
graph[a].push_back({b,c});
graph[b].push_back({a,c});
}
cin>>v1>>v2;
ans = min(dijstra(1,v1)+dijstra(v1,v2)+dijstra(v2,N),dijstra(1,v2)+dijstra(v1,v2)+dijstra(v1,N) );
// cout<<dijstra(1,v2)<<' '<<dijstra(v1,v2)<<' '<<dijstra(v1,N)<<endl;
if(ans >= INF || ans <= 0) cout<<-1;
else cout<<ans;
}
'algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
BOJ 1967 (1) | 2022.09.25 |
---|---|
BOJ 1238 (0) | 2022.09.17 |
BOJ 1753 (Dijkstra) (0) | 2022.09.15 |
programmers ์์ (0) | 2022.08.14 |
BOJ 10986 (0) | 2022.07.09 |