int mp[505][505],vis[505] int prime(int n) { int lowcost[505],sum=0; for(int i=1;i<=n;i++) lowcost[i]=mp[i][1]; vis[1]=1; for(int i=1;i<=n;i++) { int mi=0x3f,j; for(int k=1;k<=n;k++) if(!vis[k] && mi>lowcost[k]) mi=lowcost[k],j=k; vis[j]=1; sum+=lowcost[j]; for(int k=1;k<=n;k++) if(!vis[k] && lowcost[k]>mp[j][k]) lowcost[k]=mp[j][k]; } return sum; }
struct node { int u,v,w; }e[50050]; int f[50050]; void init(void) { for(int i=1;i<=n;i++) f[i]=i; } int fd(int x) { return f[x]==x?x:fd[x]=fd(f[x]); } int uion(int x,int y) { int fa=fd(x),fb=fd(y); if(fa!=fb)f[fa]=fb; } bool cmp(node a,node b) { return a.w<b.w; } int kuskal(void) { sort(e,e+n); int ans=0; for(int i=0;i<m;i++)//m为边数 { int u,v,fu,fv; u=e[i].u;v=e[i].v; fu=fd(u),fv=fd(v); if(fu!=fv) { ans+=e[i].w; uion(u,v); } } return ans; }
时间: 2024-10-13 11:46:07