首页 > 其他分享 >Kruskal和Prim模板

Kruskal和Prim模板

时间:2023-12-24 12:56:33浏览次数:40  
标签:Prim vis int Kruskal rank ++ vector ufs 模板

例题:P3366 【模板】最小生成树 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

Kruskal

#include <bits/stdc++.h>
#define debug(a) cout<<#a<<"="<<a<<'\n';

using namespace std;
using i64 = long long;

typedef pair<i64, i64> PII;

struct UFS {
	int sz;
	vector<int> rank, p;
	void link(int x, int y) {
		if (x == y)
			return;
		if (rank[x] > rank[y])
			p[y] = x;
		else
			p[x] = y;
		if (rank[x] == rank[y])
			rank[y]++;
	}
	void init(int n) {
		sz = n;
		rank.resize(n + 1);
		p.resize(n + 1);
		for (int i = 0; i <= sz; i++) {
			p[i] = i;
			rank[i] = 0;
		}
	}
	int find(int x) {
		return x == p[x] ? x : (p[x] = find(p[x]));
	}
	void unin(int x, int y) {
		link(find(x), find(y));
	}
	void compress() {
		for (int i = 0; i < sz; i++)
			find(i);
	}
};
//种类并查集 merge(y + n, x),merge(x + n, y)

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

	int n, m;
	cin >> n >> m;
	vector<pair<int, PII>> e;
	for (int i = 0; i < m; i ++) {
		int u, v, w;
		cin >> u >> v >> w;
		e.emplace_back(w, PII(u, v));
	}

	sort(e.begin(), e.end());
	UFS ufs;
	ufs.init(n);
	i64 ans = 0;
	for (int i = 0; i < m; i ++) {
		auto [w, uv] = e[i];
		auto [u, v] = uv;
		if (ufs.find(u) != ufs.find(v)) {
			ufs.unin(u, v);
			ans += w;
		}
	}

	int op = ufs.find(1);
	for (int i = 1; i <= n; i ++) {
		if (ufs.find(i) != op) {
			cout << "orz" << '\n';
			return 0;
		}
	}

	cout << ans << '\n';

	return 0;
}

Prim

#include <bits/stdc++.h>
#define debug(a) cout<<#a<<"="<<a<<'\n';

using namespace std;
using i64 = long long;

typedef pair<i64, i64> PII;

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

	int n, m;
	cin >> n >> m;
	vector g(n + 1, vector<PII>());
	vector<int> dis(n + 1);
	vector<bool> vis(n + 1);
	i64 ans = 0, cnt = 0;
	for (int i = 0; i < m; i ++) {
		int u, v, w;
		cin >> u >> v >> w;
		g[u].emplace_back(v, w);
		g[v].emplace_back(u, w);
	}

	priority_queue<PII, vector<PII>, greater<PII>> Q;
	Q.push({0, 1});
	while (Q.size()) {
		auto [w, u] = Q.top();
		Q.pop();

		if (vis[u]) continue;
		vis[u] = true;
		ans += w;
		cnt ++;
		dis[u] = w;
		for (auto [v, d] : g[u]) {
			if (!vis[v]) {
				Q.push({d, v});
			}
		}
	}

	if (cnt != n) {
		cout << "orz\n";
	} else
		cout << ans << '\n';
    
	return 0;
}

标签:Prim,vis,int,Kruskal,rank,++,vector,ufs,模板
From: https://www.cnblogs.com/Kescholar/p/17924250.html

相关文章

  • 提高代码复用性与可维护性:深入剖析模板方法模式
    什么是模板方法模式模板方法模式是一种行为型设计模式,它定义了一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重新定义该算法的某些特定步骤。在模板方法模式中,抽象类负责给出算法的轮廓和骨架(由一个或多个模板方法组成),而实现类......
  • centos6和7的模板机制作
    centos6(安装操作系统直接最小化安装就行)1.进入网卡配置文件将网卡的MAC和UUID删除(网卡需要开机自启的话,只要把ONBOOT=no改为ONBOOT=yes就行)2.挂在光盘,临时挂在3.制作yum源yumcleanall#清楚yum源的缓存yummakecache#生成新的yum源yum -y install g......
  • 提高组大纲及模板
    https://www.noi.cn/upload/resources/file/2023/03/15/1fa58eac9c412e01ce3c89c761058a43.pdf数据结构线性结构【5】双端栈【5】双端队列【5】单调队列【6】优先队列【6】ST表(SparseTable)structsparseTable{ intg(intx,inty) { retu......
  • 浅谈C++STL(Standard Template Library,标准模板库)
    2.1STL的诞生长久以来,软件界一直希望建立一种可重复利用的东西C++的面向对象和泛型编程思想,目的就是复用性的提升大多情况下,数据结构和算法都未能有一套标准,导致被迫从事大量重复工作为了建立数据结构和算法的一套标准,诞生了STL2.2STL基本概念STL(StandardTemplateLibrary,标......
  • [Halcon&定位] 解决Roi区域外的模板匹配成功
    作者:丶布布一.问题描述用halcon形状模版匹配,红色矩形框是搜索范围,ROI矩形框中间的是训练的模版,按理说应该只会匹配到ROI中中间的那个为什么会搜到搜索区域之外的部分,而且匹配分数还很高,即模板在搜索区域外仍能匹配成功。 二.原因分析使用reduce_domain裁切搜索区域部分的图像时......
  • Kruskal重构树学习笔记
    挺简单的知识点(?)概念首先Kruskal算法是用来求最小生成树的算法之一,其思想是贪心。而Kruskal重构树就是将整张图重建为二叉树。在跑Kruskal的过程中我们会从小到大加入若干条边。现在我们仍然按照这个顺序。首先新建\(n\)个集合,每个集合恰有一个节点,点权为\(0\)。每......
  • prometheus告警记录——grafana模板
    grafana面板{"annotations":{"list":[{"builtIn":1,"datasource":{"type":"datasource","uid":"grafana"},......
  • BFS模板
    #classSolution:#defBFS(self,start,target):#q=[]#用一个列表做队列#v=[]#记录走过的路#q.append(start)#把起点放入队列#v.append(start)#加入走过的路#step=0#记录扩散步数#while......
  • 如何用MyEclipse搭建JSF/Primefaces和Spring(一)
    本教程将引导大家完成为JavaServerFaces(JSF)生成软件组件的过程,在本文中您将学习到如何:从数据库表到现有项目搭建配置支持JSF2.0的服务器部署搭建的应用程序自定义Spring代码生成需要MyEclipse Spring或Bling授权。MyEclipsev2023.1.2离线版下载MyEclipse技术交流群......
  • 【misc】[HNCTF 2022 WEEK2]calc_jail_beginner_level4.1(JAIL) --沙盒逃逸,python模板
    这道题没给附件,直接连上看看这里一开始用().__class__.__base__.__subclasses__()[-4].__init__.__globals__[bytes([115,121,115,116,101,109]).decode()](bytes([115,104]).decode())进行尝试,后面发现bytes函数被禁用了,可以用另外的函数代替().__class__.__base__.__subclasse......