RT,十分感谢
https://www.luogu.com.cn/record/89737058
#include<bits/stdc++.h>
using namespace std;
struct Node{
int len,a,b;
}data[1000005];
int fa[100005];
bool cmp(Node a,Node b){
if(a.len>b.len){
return 0;
}
return 1;
}
int find(int a){
if(fa[a]==a){
return a;
}
return fa[a]=find(fa[a]);
}
void he(int a,int b){
fa[a]=find(b);
return ;
}
int main(){
int n;
scanf("%d",&n);
int k=0;
for(int i=1;i<=n;i++){
fa[i]=i;
for(int j=1;j<=n;j++){
if(i==j||j>i){
int ttmp;
scanf("%d",&ttmp);
continue ;
}
scanf("%d",&data[k].len);
data[k].a=i;
data[k++].b=j;
}
}
sort(data,data+k,cmp);
long long ans=0;
int cnt=0;
for(int i=0;i<k;i++){
// printf("%d %d\n",i,data[i].len);
if(find(data[i].a)!=find(data[i].b)){
he(data[i].a,data[i].b);
ans+=data[i].len;
cnt++;
}
if(cnt==n){
break;
}
}
printf("%lld",ans);
return 0;
}