真正的Kruskal poj 1258(应用了并查集)

【代码超详解】POJ 1258 Agri-Net(Kruskal 算法 · 模板) 一、题目描述 二、算法分析说明与代码编写指导 三、AC 代码 #include<cstdio> #include<algorithm> #pragma warning(disable:4996) using namespace std; template<size_t n> class union_find { private: unsigned roo... 阅读详情
package com.liang.poj;

import java.util.Scanner;

public class Test1258Kruskal {
	static int n = 0;
	static int[][] cin = null;
	static int[][] result = null;
	static int index = 0;
	static int[] father = null;
	static int[] rank = null;

	public static void main(String[] args) throws Exception {
		Scanner scan = new Scanner(System.in);
		n = scan.nextInt();
		cin = new int[n][n];
		father = new int[n];
		result = new int[n * n - n][3];
		rank = new int[n];

		for (int i = 0; i < cin.length; i++) {
			for (int j = 0; j < cin[i].length; j++) {
				cin[i][j] = scan.nextInt();
			}
		}

		for (int i = 0; i < cin.length; i++) {
			for (int j = 0; j < cin[i].length; j++) {
				if (cin[i][j] != 0) {
					result[index][0] = i;
					result[index][1] = j;
					result[index][2] = cin[i][j];
					index++;
				}
			}
		}

		peixu();

		kruskal(0);

	}

	public static void kruskal(int count) {
		int sum = 0;
		makeSet();
		for (int i = 0; i < result.length; i++) {
			int a = result[i][0];
			int b = result[i][1];
			if (merge(a, b)) {
				sum += result[i][2];
				count++;
			}
			if(count == n-1) {
				break;
			}
		}

		System.out.println(sum);
	}

	public static void makeSet() {
		for (int i = 0; i < father.length; i++) {
			father[i] = i;
			rank[i] = 0;
		}
	}

	public static int findFather(int x) {
		if (x != father[x]) {
			x = findFather(father[x]);
		}
		return x;
	}

	public static boolean merge(int a, int b) {
		int fa = findFather(a);
		int fb = findFather(b);

		if (fa == fb) {
			return false;
		} else {
			if (rank[fa] >= rank[fb]) {
				father[fb] = fa;
				rank[fa]++;
			} else {
				father[fa] = fb;
				rank[fb]++;
			}
			return true;
		}

	}

	public static void peixu() { // 对权值进行排序
		for (int i = 0; i < result.length; i++) {
			if (result[i][2] == 0) {
				continue;
			}
			for (int j = i + 1; j < result.length; j++) {
				if (result[j][2] == 0) {
					continue;
				}
				if (result[i][2] > result[j][2]) {
					jiaohuan(i, j, 0);
					jiaohuan(i, j, 1);
					jiaohuan(i, j, 2);
				}
			}
		}
	}

	public static void jiaohuan(int i, int j, int cos) {
		int x = 0;
		x = result[i][cos];
		result[i][cos] = result[j][cos];
		result[j][cos] = x;
	}

}


 

最小生成树(Kruskal算法,并查集) 已知一连通网,求其最小生成树。算法用的是KRUSKAL(用快速排序进行优化),用到并查集。 立即下载

相关推荐

Brainstorm简单分析近红外数据(fNIRS)(一)

Brainstorm分析fNIRS数据

weixin_43604817的博客 1352

Kruskal与并查集

Kruskal (本文中的图片来源于优快云博友,图中有水印) 作用:构成最小生成树 说明:需要用到并查集算法来优化判断回路的过程,相较与Prim,算法稍微复杂但编程相对简单,在稀疏图中更优越   算法: 【Kruskal】 1.将图中所有的边长权值按从小到大的顺序排列,从小的开始选取边: ①如果发现连上会形成环, 放弃这条边,继续寻找下一个边 ②如果发现连上不会成环,连接这条边...

qq_42152365的博客 4358

基于深度学习的中文方言识别模型训练实战

本文介绍了一个基于深度学习的中文方言识别模型开发流程。项目采用PyTorch框架和Chinese-BERT-wwm预训练模型,构建了包含BERT基础层、方言特征增强层和注意力机制的多方言分类系统。文中详细阐述了数据收集策略,包括从社交媒体、语料库和众包平台获取多源数据,并实现了文本清洗、同义词替换和回译等数据增强技术。模型架构部分展示了如何在BERT基础上添加方言特征提取层和多头注意力机制来提升识别性能。该方案支持普通话、粤语等6种主要方言的识别,目标准确率达90%以上,响应时间小于100ms,适用于智能客

电脑管家 1736

基于C语言,详解Kruskal算法(利用并查集)实现构建最小生成树

目录 一、Kruskal算法的基本介绍 具体做法:找出森林中连接任意两棵树的所有边中,具有最小权值的边,如果将它加入生成树中不产生回路,则它就是生成树中的一条边。这里的关键就是如何判断"将它加入生成树中不产生回路"。 二、Kruskal算法思想: Kruskal算法将每一个顶点都初始化为一棵树,并定义一棵MST树用来存储每次合并后的图结构。每次循环寻找权重最小的边,如果这条边的添加不会形成回路,那么在MST树中添加相应的边。如果这条边添加后会在MST中形成回路,那么忽略这条边。当所有边都被检索完毕后

weixin_52375817的博客 6600

Claude Skills:不是更聪明,而是更“像专家”的 Agent 养成方法

Claude Skills 不是在告诉 Agent“你能做什么”, 而是在约束它“你应该如何思考、如何判断、如何给结论”。

测试者家园 1296

避坑指南:LVGL在Arduino环境编译报错?3步搞定lv_conf.h路径问题(附ST7789屏幕调试技巧)

本文详细解析了在Arduino环境中配置LVGL图形库时,如何解决常见的“lv_conf.h file not found”编译报错问题。通过三步法:定位并复制模板文件、启用核心配置并指定路径、配置基础参数,从根本上解决路径问题。文章还结合ST7789屏幕驱动,分享了使用TFT_eSPI库进行显示适配、内存优化及背光控制等实战调试技巧,帮助开发者建立清晰、可维护的嵌入式UI工程基础。

lake5的博客 860

并查集——最小生成树算法Kruskal

连通图: 在无向图中,若任意两个顶点ViV_iVi​和VjV_jVj​都有路径相通,则称该无向图为连通图强连通图: 在有向图中,若任意两个顶点ViV_iVi​和VjV_jVj​都有路径相通,则称该有向图为强连通图连通网: 在连通图中,若图的边具有一定的意义,每一条边都对应着一个数,称为权值,权值代表着连接各个顶点的代价,称这种连通图叫做连通网生成树: 一个连通子图,它包含连通图中全部n个顶点,有n-1条边。如果生成树中再添加一条边,则必定成环最小生成树: 在连通网的所有生成树中,所有边的代价之和最小的生成树

长期更新自学笔记 1940

Claude Code vs Codex

Claude Code 提供了一个生产就绪(production-ready)的实现,包含良好的错误处理、优雅的关闭逻辑、详细注释和文档,以及内置测试。Claude Code 输出了一个可运行的 Next.js + TypeScript 前端,但错过了一些设计里的黄色主题元素;Codex 则生成自己的版本,没有导出设计中的图片,也没严格遵照设计主题。Codex 完成同样功能,但更简洁直接,文档和注释少一些但功能达标。任务都用同样的提示,使用 TypeScript 实现,并在一天内完成。

weixin_49869937的博客 2392

Java语言基础学习笔记(四)

一、语言基础---4.方法和数组 (一)方法设计 循环操作:解决的是代码重复的问题,用来处理重复做某一件事情。此时的重复:有规律,语句格式是相同的,有规律的 循环操作能解决所有的重复吗? 针对某一种功能的重复操作,循环解决不了,此时得使用方法 078、方法定义和基本调用操作 方法(method),函数(function):指一个特定的功能操作,程序中完成独立功能,可重复使用的一段代码的集合; 方法定义格式: [修饰符] 方法的返回值类型 方法名称([形式参数1,形式参数2,...])

u010171051的博客 480

视觉SLAM与激光SLAM简单对比分析

本文旨在梳理目前较为前沿的SLAM技术,包括激光和视觉,主要从精度和实时性两个方面对算法进系评价。对于激光SLAM了解不深,后期需要补充相关算法的核心思想与算法框架。有问题请大佬们随时留言,我再改正。

超爱吃小蛋糕的66的博客 3854

二极管钳位电路、限幅电路和检波电路Multisim电路仿真

本文系统介绍了二极管钳位、限幅和检波三种基础电路的工作原理及Multisim仿真验证。钳位电路通过电容-二极管配合实现波形整体平移,将波峰或波谷固定在指定电压;限幅电路利用二极管导通特性削除信号超出设定阈值的部分;检波电路则通过半波整流和电容滤波从调幅波中提取音频信号。三种电路均通过Multisim仿真验证了理论分析结果,展示了二极管在信号处理中的关键作用。这些基础电路广泛应用于信号调理、电平保护和通信解调等领域。

XU157303764的博客 1127

Kruskal算法求最小生成树(并查集讲解)

这个跟前者Prim算法目前我学来的都是为了求最小生成树,不过在看y神的视频讲解后发现还是需要一些前置知识的。

m0_51547272的博客 1379

CSP-J2019普及组复赛T4:加工零件

CSP-J2020普及组复赛T1:优秀的拆分,广度优先遍历求最短路。

少儿编程乔老师 1854

最小生成树的两种算法

最小生成树prim算法实现 所谓生成树,就是n个点之间连成n-1条边的图形。而最小生成树,就是权值(两点间直线的值)之和的最小值。 首先,要用二维数组记录点和权值。如上图所示无向图: int map[7][7]; map[1][2]=map[2][1]=4; map[1][3]=map[3][1]=2; ...... ...

weixin_30394251的博客 232

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

POJ1258 最小生成树 kruskal

POJ1258 最小生成树 kruskal 输入数据有多组,,没有结束标记,需要注意一下,用scanf != EOF 代码 #include<iostream> #include<vector> #include<algorithm> #include<stdio.h> using namespace std; const int MAXN =...

qq_43513855的博客 261

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

MST——poj1258 Agri-Net

http://poj.org/problem?id=1258 本题似乎是一个很裸的最小生成树,加上多组数据。 按照题目输入,这题用prim代码复杂度会低很多,因为输入就是一个现成邻接矩阵 而我就写了一个kruscal kruscal基于贪心思想,将所有边按边权从小到大排序,然后一条一条加入,一开始各点在不同集合里,每加入一条边判断:如果当前边两个端点不在同一个集合里,合并集合并累加

2333:jzqjzq的博客专栏 407

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

poj1258Agri-Net(最小生成树)

题目链接:http://poj.org/problem?id=1258 Description Farmer John has been elected mayor of his town! One of his campaign promises was to bring internet connectivity to all farms in the area. He need...

awli5131的博客 267

poj1258 kruskal

这个题用prim和kruskal都可以做,很简单,主要是熟悉一下kruskal的模板。但是我还RE,就是没有发现100的矩阵,有10000条边,这个错误,真难受。 #include<iostream> #include<cstring> #include<cstdio> #include<algorithm> using namespace std;...

sunnyorrainy的博客 221

POJ 1258 Agri-Net(最小生成树 Kruskal)

题意  给你农场的邻接矩阵  求连通所有农场的最小消耗 和上一题一样裸的最小生成树 #include #include #include using namespace std; const int N = 105, M = 10050; int par[N], ans, n, m, t; struct edge { int u, v, w;} e[M]; bool cmp(edge a,

Deng's site \# 1533

poj1258 - Agri-Net (经典邻接矩阵 求最小生成树) (Prim & Kruskal)

Agri-Net Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 40028   Accepted: 16291 Description Farmer John has been elected mayor of his town! One of his campaig

ITCTO-疯男的优快云博客 878

POJ 1258 Agri-Net 【最小生成树入门题目】

原题链接:http://poj.org/problem?id=1258 周四上了节数据结构终于知道何为最小生成树,晚上回寝,遂得此题! Agri-Net Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 29613   Accepted: 11750 Des

free斩 5512

POJ 1258的Kruskal做法

Kruskal算法伪代码:KRUSKAL-FUNCTION(G, w) 1 F := 空集合 2 for each 图 G 中的顶点 v 3 do 將 v 加入森林 F 4 所有的边(u, v) ∈ E依权重 w 递增排序 5 for each 边(u, v) ∈ E 6 do if u 和 v 不在同一棵子树 7 then

314

POJ 1258 Agri-Net - (MST - Kruskal+并查集)

题目链接:http://poj.org/problem?id=1258 #include &lt;stdio.h&gt; #include &lt;vector&gt; #include &lt;algorithm&gt; #include &lt;queue&gt; using namespace std; //POJ 1258 Agri-Net typedef struct...

rsy56640的博客 168

(最小生成树)POJ1258Agri-Net

POJ1258Agri-Net 题意&思路: 给n个农场之间的距离,要铺设光缆使之两两连通,问最小铺设光缆的距离。 模板题。 代码: #include<iostream> #include<stdio.h> #include<stdlib.h> #include<algorithm> #include<string.h> #inc...

Z7784562的博客 395

POJ1258 Agri-Net,Kruskal算法

这题很简单,我选择用Kruskal算法,prim算法其实比较简单一点。。。 /******************************************************************************* # Author : Neo

Neo Fung的专栏 803

Kruskal模板(Poj1258)

//Poj 1258 #include<algorithm> #include<iostream> using namespace std; int u[10010]; int v[10010]; int w[10010]; int r[10010]; int p[110]; int n, m; int cmp(const int i, const int j) {...

@弟中弟的博客 153
上一篇: poj 2349
下一篇: 数据结构之并查集
三易的博客
博客等级 码龄15年 42粉丝 89原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值