페이지

1185번: 유럽여행 - 코드 수정 필요

https://www.acmicpc.net/problem/1185


#include<stdio.h>
#include<algorithm>
using namespace std;
struct uf {
    int flag[10001], h[10001];
    int find(int x) {
        if (flag[x] == x) return x;
        return flag[x] = find(flag[x]);
    }
    void un(int x, int y) {
        int rx = find(x), ry = find(y);
        if (h[rx]>h[ry]) flag[ry] = rx;
        else {
            flag[rx] = ry;
            if (h[rx] == h[ry]) h[rx]++;
        }
    }
}st;
struct str {
    int x, y, l;
    bool operator<(str i) const {
        return l<i.l;
    }
}r[100001];
int n, p, c[10001], res;
int main() {
    scanf("%d %d", &n, &p);
    for (int i = 1; i <= n; i++) {
        scanf("%d", &c[i]);
        st.flag[i] = i;
    }
    res = *min_element(c + 1, c + 1 + n);
    for (int i = 1; i <= p; i++) {
        int s, e, l;
        scanf("%d %d %d", &s, &e, &l);
        r[i] = { s,e,c[s] + c[e] + 2 * l };
    }
    sort(r + 1, r + 1 + p);
    for (int i = 1; i <= p; i++) {
        if (st.find(r[i].x) == st.find(r[i].y)) continue;
        res += r[i].l;
        st.un(r[i].x, r[i].y);
    }
    printf("%d", res);
    return 0;
}

댓글 없음 :

댓글 쓰기