2020. 12. 21. 15:33ใ๐จ๐ป๐ซ ํ๋ก๊ทธ๋๋ฐ/BOJ(๋ฐฑ์ค)
๋ฐฉํฅ์ฑ์ด ์๋ ๊ทธ๋ํ์์ 1๋ฒ ์ ์ ์์ N๋ฒ ์ ์ ์ผ๋ก ๊ฐ๋ ๋ฐ๋์ V1,V2 ์ ์ ์ ์ง๋๋ ์ต๋จ ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ๋ ๋ฌธ์ ์์ต๋๋ค.์ถ๋ฐ ์ง์ ๊ณผ ๋์ฐฉ์ง์ ์ 1๋ฒ ์ ์ ๊ณผ N๋ฒ ์ ์ ์ผ๋ก ๊ณ ์ ๋์ด ์์ผ๋ฏ๋ก
1 - V1 - V2 - N
1 - V2 - V1 - N
์ด ๋ ๊ฐ์ง ๊ฒฝ์ฐ๋ง ์ฒดํฌํ๋ฉด ๋ฌธ์ ์์ ์๊ตฌํ๋ ์ต๋จ ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ ์ ์์ต๋๋ค.
์ ์ ๊ณผ ๊ฐ์ ์ ์ต๋ ๊ฐ์๋ฅผ ๊ฐ์ํ์ฌ ์๊ฐ ๋ณต์ก๋ O(|V|*log|E|)์ธ ๋ค์ต์คํธ๋ผ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ์ต๋๋ค.
๊ทธ๋ํ๋ ์ด์ค๋ฒกํฐ๋ฅผ ์ฌ์ฉํด ์ธ์ ๋ฆฌ์คํธ ํํ๋ก ๊ตฌํํ๊ณ
์ต๋จ๊ฑฐ๋ฆฌ์ ํฉ์ด ๊ฐ๋ฅํ ์ต๋๊ฐ์ ๋๊ฑฐ๋ INF์ ํฉ์ผ๋ก ์ธํด ์ค๋ฒํ๋ก์ฐ ๋ ๊ฒฝ์ฐ๋ฅผ ์๊ฐํ์ฌ ์กฐ๊ฑด๋ฌธ์ ์์ฑํ์ต๋๋ค.
#include<bits/stdc++.h>
using namespace std;
typedef pair<int,int> pii;
const int MAX=800 + 1;
const int INF=987654321;
int N,E,v1,v2,dist[MAX],ans;
vector<vector<pii>> adj_list;
int djikstra(int s,int e){
fill(dist,dist+N+1,INF);
dist[s]=0;
priority_queue<pii,vector<pii>,greater<pii>> pq;
pq.push({0,s});
while(!pq.empty()){
int cur_node=pq.top().second;
int cost=pq.top().first;
pq.pop();
if(dist[cur_node]<cost) continue;
for(int i=0;i<adj_list[cur_node].size();i++){
int next_node=adj_list[cur_node][i].second;
int tmp_cost=cost+adj_list[cur_node][i].first;
if(tmp_cost<dist[next_node]){
dist[next_node]=tmp_cost;
pq.push({tmp_cost,next_node});
}
}
}
return dist[e];
}
int main(){
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cin>>N>>E;
adj_list.resize(N+1);
for(int i=0;i<E;i++){
int a,b,c;
cin>>a>>b>>c;
adj_list[a].push_back({c,b});
adj_list[b].push_back({c,a});
}
cin>>v1>>v2;
ans=min(djikstra(1,v1)+djikstra(v1,v2)+djikstra(v2,N),djikstra(1,v2)+djikstra(v2,v1)+djikstra(v1,N));
cout<<(ans>3*800*1000||ans<0?-1:ans)<<"\n";
return 0;
}
๋ถ์กฑํ ๋ถ๋ถ, ๊ถ๊ธํ ์ ์ธ์ ๋ ๋๊ธ ๋ถํ๋๋ฆฝ๋๋ค!
'๐จ๐ปโ๐ซ ํ๋ก๊ทธ๋๋ฐ > BOJ(๋ฐฑ์ค)' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] 13306๋ฒ: ํธ๋ฆฌ (0) | 2021.01.12 |
---|---|
[๋ฐฑ์ค] 11377๋ฒ: ์ดํ๊ฐํธ 3 (0) | 2021.01.10 |
[๋ฐฑ์ค] 9576๋ฒ: ์ฑ ๋๋ ์ฃผ๊ธฐ (0) | 2020.12.28 |
[๋ฐฑ์ค] 2470 ๋ฒ: ๋ ์ฉ์ก (0) | 2020.12.26 |
[๋ฐฑ์ค] 1644๋ฒ: ์์์ ์ฐ์ํฉ (0) | 2020.12.25 |