1252 하나로


1. 모든 섬을 비용하여 섬과 섬 사이의 거리를 구한다.


2. 만든 거리들을 가지고 크루스칼 알고리즘을 활용해 최소비용신장트리를 만든다.


3 . 값을 출력한다.



ps --> 데이터타입을 잘 구성해야 한다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
#include <iostream>
#include <algorithm>
#include <vector>
#include <cmath>
#define P pair<double,double>
using namespace std;
 
struct dist{
    int u, v;
    double c;
    dist(int u,int v,double c) :u(u),v(v),c(c){}
};
 
int t, n;
double e;
int group[1000];
P map[1000];
 
int Find(int x) {
    if (x == group[x]) return x;
    return group[x] = Find(group[x]);
}
 
void Union(int a,int b) {
    a = Find(a);
    b = Find(b);
    if (a == b) return;
    group[b] = a;
}
 
int compare_dist(const dist &a, const dist &b) {
    return a.c < b.c;
}
 
double kruskal(vector<dist> &d) {
    double ans = 0;
 
    sort(d.begin(), d.end(), compare_dist);
 
    for (int i = 0; i < d.size(); i++) {
        if (Find(d[i].u) == Find(d[i].v)) continue;
 
        ans += d[i].c;
        Union(d[i].u, d[i].v);
    }
 
    return e * (ans);
}
 
int main() {
    scanf("%d"&t);
    for (int tc = 1; tc <= t; tc++) {
        scanf("%d"&n);
        for (int i = 0; i < n; i++) {
            scanf("%lf"&map[i].first);
            group[i] = i;
        }
        for (int i = 0; i < n; i++) {
            scanf("%lf"&map[i].second);
        }
        scanf("%lf"&e);
 
        vector<dist> d;
        //모든경로에 대해 d 벡터에 저장
        for (int i = 0; i < n; i++) {
            for (int j = i + 1; j < n; j++) {
                d.push_back(dist(i,j,
                    pow(map[i].first - map[j].first, 2
                  + pow(map[i].second - map[j].second, 2)));
            }
        }
 
        printf("#%d %.0lf\n", tc, kruskal(d));
    }
}
cs


'SWEA::문제풀이' 카테고리의 다른 글

4012 요리사  (2) 2018.03.17
1258 행렬찾기  (0) 2018.02.25
3143 가장 빠른 문자열 타이핑  (0) 2018.02.24
1767 프로세서 연결하기  (1) 2018.02.24
3349 최솟값으로 이동하기  (0) 2018.02.23

+ Recent posts