Problem Solving/BOJ [백준 1238번] [Dijkstra] 파티 - 728x90 반응형 Approach 최단 시간으로 걸어야한다는 것에서 다익스트라를 떠올려주면 된다. 왔다갔다 하는 상황이므로 여러번 다익스트라를 돌려서 처리해주면 된다. 물론 플로이드 워샬로도 풀 수 있다. Code #include <bits/stdc++.h> #define fastio cin.tie(0)->sync_with_stdio(0) using namespace std; typedef pair<int, int> pii; typedef unsigned long long ull; typedef long long ll; typedef vector <ull> ullv1; typedef vector <vector <ull> > ullv2; const int INF = 2000000000; int main() { fastio; int n, m, x; cin >> n >> m >> x; x--; vector<pii> edge[1000]; for(int i = 0; i < m ;i++){ int a, b, c; cin >> a >> b >> c; edge[a - 1].push_back({b - 1, c}); } vector<int> result(n); for(int i = 0; i < n; i++){ int start = i; vector<int> dist(n, INF); dist[start] = 0; priority_queue<pii, vector<pii>, greater<pii> > pq; pq.push({0, start}); while(!pq.empty()){ int cur_cost = pq.top().first, cur = pq.top().second; pq.pop(); if(cur == x) continue; if(dist[cur] < cur_cost) continue; for(auto p : edge[cur]){ int to = p.first, cost = p.second; if(cur_cost + cost < dist[to]){ dist[to] = cur_cost + cost; pq.push({dist[to], to}); } } } result[start] += dist[x]; } vector<int> dist(n, INF); dist[x] = 0; priority_queue<pii, vector<pii>, greater<pii> > pq; pq.push({0, x}); while(!pq.empty()){ int cur_cost = pq.top().first, cur = pq.top().second; pq.pop(); if(dist[cur] < cur_cost) continue; for(auto p : edge[cur]){ int to = p.first, cost = p.second; if(cur_cost + cost < dist[to]){ dist[to] = cur_cost + cost; pq.push({dist[to], to}); } } } for(int i = 0; i < n; i++){ result[i] += dist[i]; } sort(result.begin(), result.end()); cout << result.back() << "\n"; return 0; } 반응형 공유하기 URL 복사카카오톡 공유페이스북 공유엑스 공유 게시글 관리 구독하기비룡의 컴퓨터이야기 Contents Approach Code 당신이 좋아할만한 콘텐츠 [백준 10473번] [Dijkstra] 인간 대포 2022.01.12 [백준 1261번] [Dijkstra] 알고스팟 2022.01.12 [백준 4485번] [Dijkstra] 녹색 옷 입은 애가 젤다지? 2022.01.12 [백준 13907번] [Dijkstra / DP] 세금 2022.01.10 댓글 0 + 이전 댓글 더보기