嗯,kruscal多的就不讲了

来源:互联网 发布:dnf一进去网络连接中断 编辑:程序博客网 时间:2024/05/17 02:25
#include<iostream>#include<algorithm>#include<cstdio>using namespace std;const int maxn=10000;#define inf 999999999;int p[maxn][maxn],e[maxn][maxn],dis[maxn],f[maxn];struct T{  int l, r, w;}a[maxn];int fa(int x){  if(x==f[x])return x;  else{    f[x]=fa(f[x]);return f[x];  }}int cmp(T u,T v){  return u.w<v.w;}int merge(int u,int v){  int f1=fa(u);  int f2=fa(v);  if(f1!=f2){    f[f1]=v;    return 1;  }  return 0;}int main(){  int i,j,k,m,n,sum=0,ans=0;  scanf("%d%d",&n,&m);  for(i=1;i<=n;i++)dis[i]=inf;  for(i=1;i<=n;i++)f[i]=i;  for(i=1;i<=n;i++)    for(j=1;j<=n;j++){  e[i][i]=0;  e[i][j]=inf;}  for(i=1;i<=m;i++){  int x,y,z;    scanf("%d%d%d",&x,&y,&z);    a[i].l=x;a[i].r=y;a[i].w=z;  }  sort(a+1,a+m+1,cmp);  /*printf("\n");  for(i=1;i<=m;i++){    printf("%d %d %d\n",a[i].l,a[i].r,a[i].w);  }*/  for(i=1;i<=m;i++){  if(merge(a[i].l,a[i].r)){     sum++;     ans+=a[i].w;    }    if(sum==n-1){break;}  }  printf("%d",ans);  return 0;}

0 0
原创粉丝点击