MST的kruskal算法
其实就是并查集的应用,先将邻接矩阵换成边集,再按权值由小到大排序,最后用Unionset构造最小生成树。。。。
带有优化的并查集=。=
带有优化的并查集=。=
int find_father(int x)
{
int tot=0;
while(x!=father[x])
{
save[tot++]=x;
x=father[x];
}
for(int i=0;i<tot;i++)
{
father[save]=x;
}
return x;
}
int Union_set(int x,int y,int z)
{
int Fx=find_father(x);
int Fy=find_father(y);
if(Fx==Fy) return 0;
if(Rank[Fx]<=Rank[Fy])
{
father[Fy]=Fx;
Rank[Fx]+=Rank[Fy];
}
else
{
father[Fx]=Fy;
Rank[Fy]+=Rank[Fx];
}
return z;
}