#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; }
1185번: 유럽여행 - 코드 수정 필요
https://www.acmicpc.net/problem/1185
피드 구독하기:
댓글
(
Atom
)
댓글 없음 :
댓글 쓰기