Skip to content

Commit 47db07f

Browse files
authored
Create [16]_3.cpp
1 parent 671f5e8 commit 47db07f

File tree

1 file changed

+76
-0
lines changed

1 file changed

+76
-0
lines changed

Solutions/[16]_3.cpp

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
#include <bits/stdc++.h>
2+
3+
using namespace std;
4+
5+
int n, m;
6+
int parent[1001];
7+
vector<pair<int, int> > locations;
8+
vector<pair<double, pair<int, int> > > edges;
9+
10+
// 두 점 사이의 거리를 계산하는 함수
11+
double getDistance(pair<int, int> p1, pair<int, int> p2) {
12+
long long a = p1.first - p2.first;
13+
long long b = p1.second - p2.second;
14+
return sqrt((a * a) + (b * b));
15+
}
16+
17+
int getParent(int a) {
18+
if (a == parent[a]) return a;
19+
return parent[a] = getParent(parent[a]);
20+
}
21+
22+
void unionParent(int a, int b) {
23+
a = getParent(a);
24+
b = getParent(b);
25+
if (a < b) parent[b] = a;
26+
else parent[a] = b;
27+
}
28+
29+
int compareParent(int a, int b) {
30+
a = getParent(a);
31+
b = getParent(b);
32+
if (a == b) return true;
33+
return false;
34+
}
35+
36+
int main() {
37+
cin >> n >> m;
38+
for (int i = 0; i < n; i++) {
39+
int x, y;
40+
cin >> x >> y;
41+
locations.push_back(make_pair(x, y));
42+
}
43+
44+
// 모든 점 사이의 거리를 계산하여 간선(Edge) 리스트에 저장
45+
for (int i = 0; i < n - 1; i++) {
46+
for (int j = i + 1; j < n; j++) {
47+
edges.push_back(make_pair(getDistance(locations[i], locations[j]), make_pair(i + 1, j + 1)));
48+
}
49+
}
50+
51+
for (int i = 1; i <= n; i++) {
52+
parent[i] = i;
53+
}
54+
55+
for (int i = 0; i < m; i++) {
56+
int a, b;
57+
cin >> a >> b;
58+
unionParent(a, b);
59+
}
60+
61+
// 간선의 길이를 기준으로 오름차순 정렬
62+
sort(edges.begin(), edges.end());
63+
64+
double result = 0;
65+
for (int i = 0; i < edges.size(); i++) {
66+
double cost = edges[i].first;
67+
int a = edges[i].second.first;
68+
int b = edges[i].second.second;
69+
if (!compareParent(a, b)) {
70+
unionParent(a, b);
71+
result += cost;
72+
}
73+
}
74+
75+
printf("%0.2f", result);
76+
}

0 commit comments

Comments
 (0)