#include <bits/stdc++.h>
#define FWD(a,b,c) for(int a=(b); a<(c); ++a)
using namespace std;
typedef long long LL;
const int MAXN = 2010;
const int INF = 1000000010;
struct edge{
int a, b, c;
};
inline bool cmp(const edge &a, const edge &b){
return a.c < b.c;
}
int n;
LL r;
vector<edge> edges;
int p[MAXN];
int find(int u){
return p[u]==u?u:p[u]=find(p[u]);
}
int main(){
scanf("%d", &n);
FWD(i,0,n)
FWD(j,i+1,n+1){
edge e;
e.a = i;
e.b = j;
scanf("%d", &e.c);
edges.push_back(e);
}
FWD(i,0,n+1)
p[i] = i;
sort(edges.begin(), edges.end(), cmp);
for(edge e : edges){
if(find(e.a) != find(e.b)){
r += e.c;
p[p[e.a]] = p[e.b];
}
}
printf("%lld\n", r);
return 0;
}
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 | #include <bits/stdc++.h> #define FWD(a,b,c) for(int a=(b); a<(c); ++a) using namespace std; typedef long long LL; const int MAXN = 2010; const int INF = 1000000010; struct edge{ int a, b, c; }; inline bool cmp(const edge &a, const edge &b){ return a.c < b.c; } int n; LL r; vector<edge> edges; int p[MAXN]; int find(int u){ return p[u]==u?u:p[u]=find(p[u]); } int main(){ scanf("%d", &n); FWD(i,0,n) FWD(j,i+1,n+1){ edge e; e.a = i; e.b = j; scanf("%d", &e.c); edges.push_back(e); } FWD(i,0,n+1) p[i] = i; sort(edges.begin(), edges.end(), cmp); for(edge e : edges){ if(find(e.a) != find(e.b)){ r += e.c; p[p[e.a]] = p[e.b]; } } printf("%lld\n", r); return 0; } |
polski