Kruskal
#include<bits/stdc++.h>
using namespace std;
int father[5005],ans;
struct bian{
int data,l,r,c;
}b[5005];
int getfather(int p){
if(father[p]==p) return p;
return father[p]=getfather(father[p]);
}
void uni(int x,int y){
int fx=getfather(x);
int fy=getfather(y);
if(fx!=fy) father[fx]=fy;
}
bool cmp(const bian x,const bian y){
return x.data<y.data;
}
int main(){
int t=0,x,y,n,k;
cin>>n>>k;
for(int i=1;i<=k;i++){
scanf("%d%d%d",&b[i].l,&b[i].r,&b[i].data);
}
for(int i=1;i<=n;i++){
father[i]=i;
}
sort(b+1,b+k+1,cmp);
for(int j=1;j<=k;j++){
int sum=0;
if(!b[j].c&&(getfather(b[j].l)!=getfather(b[j].r))){
uni(b[j].l,b[j].r);
b[j].c=1;
cout<<b[j].l<<"->"<<b[j].r<<endl;
ans+=b[j].data;
}
}
cout<<"ans="<<ans;
}
Prim
#include<bits/stdc++.h>
using namespace std;
int b[5005],vis[5005],a[5005][5005],ans=0;
int main(){
int n,k,x,y;
cin>>n>>k;
for(int i=1;i<=k;i++){
cin>>x>>y;
cin>>a[x][y];
a[y][x]=a[x][y];
}
k=1;
for(int i=1;i<=n;i++){
if(a[i][k]) vis[i]=a[i][k];
else vis[i]=2147483647;
}
b[1]=1;
for(int i=1;i<=n-1;i++){
int m=2147483647;
cout<<k<<"->";
k=0;
for(int j=1;j<=n;j++){
if(vis[j]<m&&vis[j]&&!b[j]){
m=vis[j];
b[j]=1;
b[k]=0;
k=j;
}
}
cout<<k<<endl;
ans+=m;
vis[k]=0;
for(int j=1;j<=n;j++){
if(vis[j]>a[j][k]&&a[j][k]&&!b[j]){
vis[j]=a[j][k];
}
}
}
printf("%d",ans);
return 0;
}