【洛谷模板题 最小生成树】kruskal算法入门

Kruskal算法

 最小生成树算法知识点: 算法导论第23章:最小生成树

#include 
#include 
#include 
#include 
#include 
using namespace std;

struct Edge
{
	int begin,end,length;
	bool operator < (const Edge& t)
	{
		return length < t.length;
	}
} edge[200005];

int parent[5005];
int Rank[5005];

inline int find_set(int a)	//路径压缩优化 
{
	return a == parent[a] ? a : parent[a] = find_set(parent[a]);
}

inline void union_set(int a, int b)	//按秩合并优化 
{
	int pa = find_set(a);
	int pb = find_set(b);
	
	if(Rank[pa] < Rank[pb])
		parent[pa] = pb;
	else
	{
		parent[pb] = pa;
		if(Rank[pa]==Rank[pb])
			++Rank[pa];
	}
}

int main()
{
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);

	int n,m;
	cin>>n>>m;
	for(int i=1; i<=n; ++i)
		parent[i] = i;

	for(int i=0; i>edge[i].begin>>edge[i].end>>edge[i].length;
	sort(edge,edge+m);

	int sum = 0, cnt = 0;
	for(int i=0; i

 

在实际编程题中,“按秩合并“并不能起到很好的优化效果

你可能感兴趣的:(编程题)