「学习笔记」重修生成树

Posted 朝气蓬勃 后生可畏

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了「学习笔记」重修生成树相关的知识,希望对你有一定的参考价值。

最小生成树(Minimum Spanning Tree,MST)为边权和最小的生成树。

算法

Kruskal 算法

实现

将所有的边按边权从小到大排序,然后用并查集维护一条边所连接的两个点是否已联通(不能形成环)。

int find(int x) 
	return fa[x] == x ? fa[x] : fa[x] = find(fa[x]);


ll kruskal() 
	ll tot = 0, cot = 0;
	sort(e + 1, e + m + 1);
	for (int i = 1; i <= n; ++ i) 
		fa[i] = i;
	
	for (int i = 1; i <= m; ++ i) 
		int x = e[i].u, y = e[i].v;
		int fx = find(x), fy = find(y);
		if (fx != fy) 
			fa[fx] = fy;
			tot += e[i].w;
			++ cot;
			if (cot >= n - 1)	return tot;
		
	
	return 0;

Prim 算法

原理与 dijkstra 是一样的,都是用了贪心的思想。
dis[v] 连向 \\(v\\) 点的最小生成树的边的边长。

void prim() 
	priority_queue<pil, vector<pil>, greater<pil> > q;
	q.push(make_pair(0, 1));
	while (!q.empty()) 
		int u = q.top().second;
		q.pop();
		if (vis[u])	continue;
		++ cnt;
		tot += dis[u];
		vis[u] = 1;
		if (cnt >= n)	return ;
		for (auto it : son[u]) 
			int v = it.first, w = it.second;
			if (dis[v] > w) 
				dis[v] = w;
				q.push(make_pair(dis[v], v));
			
		
	

最小生成树学习笔记

以上是关于「学习笔记」重修生成树的主要内容,如果未能解决你的问题,请参考以下文章

最小生成树学习笔记

机器学习笔记之三CART 分类与回归树

STP(生成树协议)--学习笔记

学习笔记:最小生成树算法

Jungle Roads——最小生成树

数据结构学习笔记——图的应用1(最小生成树最短路径)