Search
๐Ÿป

๊น€๊ธฐํ—Œ

2.๋ฌธ์ œ์ด๋ฆ„
3. ์ˆ˜ํ–‰์‹œ๊ฐ„[์ดˆ(s)]
1200
์ข‹์•„์š” ๋ˆ„๋ฅด๊ธฐ
์ข‹์•„์š” ์ˆ˜
: 0
5 more properties
| ์ฝ”๋“œ ์ž‘์„ฑํ•˜๊ธฐ
#include<vector> #include<queue> #include<algorithm> #include<utility> using namespace std; typedef pair<int, int>p; vector<vector<p>>v; priority_queue<p, vector<p>, greater<p>> pq; //์˜ค๋ฆ„์ฐจ์ˆœ ์šฐ์„ ์ˆœ์œ„ ํ ์„ ์–ธ int answer; bool check[105]; void prim(int start) { //ํ”„๋ฆผ ์•Œ๊ณ ๋ฆฌ์ฆ˜ pq.push({ 0,start }); //์‹œ์ž‘์  start๋Š” ๋ญ๋“  ์ƒ๊ด€ X while (!pq.empty()) { p tmp = pq.top(); int now = tmp.second, cost = tmp.first; pq.pop(); if (check[now])continue; answer += cost; check[now] = 1; for (int i = 0; i < v[now].size(); i++) { int next = v[now][i].second; int ncost = v[now][i].first; if (!check[next])pq.push({ ncost, next }); } } } int solution(int n, vector<vector<int>> costs) { v.resize(n); for (int i = 0; i < costs.size(); i++) {//์ฃผ์–ด์ง„ ๊ฐ„์„ ์œผ๋กœ ๊ทธ๋ž˜ํ”„ ๊ตฌ์„ฑ int from = costs[i][0], to = costs[i][1], cost = costs[i][2]; v[from].push_back({ cost,to }); v[to].push_back({ cost,from }); } prim(0); //ํ”„๋ฆผ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์‹œ์ž‘ return answer; }
C++
๋ณต์‚ฌ
| ์ฝ”๋“œ ์„ค๋ช…ํ•˜๊ธฐ
์ตœ์†Œ ์ŠคํŒจ๋‹ ํŠธ๋ฆฌ (Minimum Spanning Tree, MST)๋ฅผ ๋งŒ๋“ค๊ณ  MST ๋น„์šฉ์˜ ํ•ฉ์„ ๊ตฌํ•˜๋Š” MST์˜ ๊ธฐ๋ณธ ๋ฌธ์ œ
MST๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์—๋Š” ๋Œ€ํ‘œ์ ์œผ๋กœ ํ”„๋ฆผ, ํฌ๋ฃจ์Šค์นผ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์žˆ๋‹ค .
ํ”„๋ฆผ๊ณผ ํฌ๋ฃจ์Šค์นผ ๋ชจ๋‘ ๊ทธ๋ฆฌ๋”” ๋ฐฉ์‹์˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ธ๋ฐ, ํฌ๋ฃจ์Šค์นผ์€ Union & Find๋ฅผ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ, Union & Find๊ฐ€ ๊ธฐ์–ต์ด ๋‚˜์ง€ ์•Š์•„ ํ”„๋ฆผ ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ํ•ด๊ฒฐํ•˜์˜€๋‹ค.
์ฝ”๋“œ๋Š” BFS์™€ ๊ฑฐ์˜ ์œ ์‚ฌํ•œ๋ฐ, ๋‹ค๋ฅธ ์ ์€ ๊ฐ„์„ (edge)์— ๊ฐ€์ค‘์น˜(cost)๊ฐ€ ์žˆ๋‹ค๋Š” ์ ๊ณผ, ์ผ๋ฐ˜ Queue๊ฐ€ ์•„๋‹Œ ๊ฐ„์„ ์˜ ๋น„์šฉ์ด ์ž‘์€ ๊ฒƒ ๋ถ€ํ„ฐ ์„ ํƒํ•˜๊ธฐ์— ์šฐ์„ ์ˆœ์œ„ ํ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋Š” ์ .
์šฐ์„ ์ˆœ์œ„ ํ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์—๋Š” 2๊ฐ€์ง€๊ฐ€ ์žˆ๋Š”๋ฐ
1.
์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์šฐ์„ ์ˆœ์œ„ ํ๋ฅผ ์ƒ์„ฑ ๋ฐ ๋ฐ์ดํ„ฐ ์‚ฝ์ž…
2.
๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ์šฐ์„ ์ˆœ์œ„ ํ์— ์ƒ์„ฑ ๋ฐ ๋ฐ์ดํ„ฐ ์‚ฝ์ž…์‹œ cost์— -๋ฅผ ๋ถ™์—ฌ์„œ ์‚ฝ์ž…
typedef pair<int, int>p; priority_queue<p, vector<p>, greater<p>> pq1; //์˜ค๋ฆ„์ฐจ์ˆœ ์šฐ์„ ์ˆœ์œ„ ํ ์„ ์–ธ priority_queue<p> pq2; // ๋‚ด๋ฆผ์ฐจ์ˆœ ์šฐ์„ ์ˆœ์œ„ ํ ์„ ์–ธ pq1.push({cost,node}); pq2.push({-cost,node}); //๋‘˜์€ ๊ฐ™์€ ๋ฐฉ๋ฒ•์ด๋‹ค
C++
๋ณต์‚ฌ
์ฝ”๋“œ์— ๋Œ€ํ•œ ์„ค๋ช…๋ณด๋‹จ MST์— ๋Œ€ํ•˜์—ฌ ๊ณต๋ถ€ํ•˜๋ฉด ํ’€ ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ
BOJ์—์„œ ์œ ์‚ฌํ•œ ๋ฌธ์ œ