达到的
#include <iostream>
#include <algorithm>
using namespace std;
int trank[100];
int n,m,U[100],V[100],W[100],R[100];
int A[100];
int par[100];
void make_set(int n)
{
for(int i=1;i<=n;i++)
{
par[i]=i;
trank[i]=0;
}
}
/*int find(int x)
{
//return set[x]==x?x:set[x]=find(set[x]);
if(set[x]==x) return x;
else {set[x]=find(set[x]);return find(set[x]);}//这里有瑕疵,每次调次函数只更新一次set【】
}*/
int find(int x)
{
return par[x]==x?x:par[x]=find(par[x]);
}
void Union(int x,int y)
{
x=find(x);
y=find(y);
if(trank[x]>trank[y])
{
par[y]=x;//y为头目;x为集合名
}
else if(trank[x]<trank[y])
{
par[x]=y;
}
else trank[x]++;
}
int cmp(int i,int j)
{
if(W[i]<W[j]) return true;
}
void mst_kruskal()
{
make_set(n);
for(int i=1;i<=m;i++)
R[i]=i;
sort(R,R+m,cmp);
for(int i=1;i<=m;i++)
{
if(find(U[R[i]])!=find(V[R[i]]))
{
A[i]=R[i];
Union(U[R[i]],V[R[i]]);
}
}
}