最小生成树的应用模板(普利姆算法)

2024-04-01 23:28

本文主要是介绍最小生成树的应用模板(普利姆算法),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

代码无误,空间爆了,纯属洛谷责任

P1396 营救 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

代码:

import java.awt.Checkbox;
import java.awt.PageAttributes.OriginType;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.math.BigInteger;
import java.math.MathContext;
import java.security.PublicKey;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.PriorityQueue;
import java.util.Scanner;
import java.util.TreeMap;
import java.util.TreeSet;import javax.print.attribute.standard.JobMessageFromOperator;
import javax.print.attribute.standard.MediaName;
import javax.print.attribute.standard.ReferenceUriSchemesSupported;import java.awt.Checkbox;
import java.awt.PageAttributes.OriginType;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.math.BigInteger;
import java.math.MathContext;
import java.security.PublicKey;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.PriorityQueue;
import java.util.Scanner;
import java.util.TreeMap;
import java.util.TreeSet;import javax.print.attribute.standard.JobMessageFromOperator;
public class Main {	
public static void main(String[] args) throws IOException {Scanner sc=new Scanner(System.in);BufferedReader br1=new BufferedReader(new InputStreamReader(System.in));PrintWriter pw1=new PrintWriter(System.out);
String[] aStrings=br1.readLine().split(" ");
nn=Integer.parseInt(aStrings[0]);
mm=Integer.parseInt(aStrings[1]);
ss=Integer.parseInt(aStrings[2]);
tt=Integer.parseInt(aStrings[3]);
int a;
int u,v,w;
GG=new int[nn+1][nn+1];
closeset=new int[nn+1];
lowcost=new int[nn+1];
qianqu=new int[nn+1];
for(a=0;a<=nn;a++) {Arrays.fill(GG[a], aa);
}
for(a=0;a<mm;a++) {String[] bStrings=br1.readLine().split(" ");u=Integer.parseInt(bStrings[0]);v=Integer.parseInt(bStrings[1]);w=Integer.parseInt(bStrings[2]);GG[v][u]=Math.min(GG[v][u], w);GG[u][v]=Math.min(GG[u][v], w);
}
pirm();
zhuixun(ss, tt);
System.out.println(answer);}public static int nn,mm,ss,tt;public static int[][] GG;public static int[] closeset;public static int[] lowcost;public static int[] qianqu;public static int aa=Integer.MAX_VALUE;public static int answer=0;public static void zhuixun(int x,int y) {if(x==y) {return;}answer=Math.max(answer, lowcost[y]);zhuixun(x, qianqu[y]);}public static void pirm() {int a;for(a=0;a<=nn;a++) {Arrays.fill(closeset, 0);Arrays.fill(lowcost, aa);}int num,e,ans;e=ss;num=0;ans=0;qianqu[e]=e;closeset[e]=-1;while(num<nn-1) {int micost=aa;int miedge=-1;for(int b=1;b<=nn;b++) {if(closeset[b]!=-1) {int temp=GG[e][b];if(GG[e][b]<lowcost[b]) {lowcost[b]=temp;closeset[b]=e;}if(lowcost[b]<micost) {micost=lowcost[b];miedge=b;}}}num++;ans=ans+micost;e=miedge;qianqu[e]=closeset[e];closeset[e]=-1;}}
}

核心思想,最小生成树得到后一定使得我们旋定的那个点到其他所有的额点的花费的总和最小。

那如何求解这道题目呢,我们想一下,从s到t的所有路径中,按照上述方法进行的最小路径计算,我们假设从s到t一共经过5条边,因为最小生成树是唯一确定的,所以这5条变一定是唯一确定的,根据最小生成树的原理我们可以得出结论,直接跟t来连接的那条边一定是所有跟t来连接的边的最小的那个,假设这个点是m,因为最小生成树就是找到t与t-1个点的最小边,同理,来连接m的边也一定是所有跟m连接的最小的边,所以有结论,从s到t的路径的最大值就是我们要求的。

在原版pirm算法上,我们首先额外剋一个前驱数组用来记录每个点的前驱点,然后加一个路径寻找方法来搜索路径,就完成啦

这篇关于最小生成树的应用模板(普利姆算法)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/868402

相关文章

C语言中位操作的实际应用举例

《C语言中位操作的实际应用举例》:本文主要介绍C语言中位操作的实际应用,总结了位操作的使用场景,并指出了需要注意的问题,如可读性、平台依赖性和溢出风险,文中通过代码介绍的非常详细,需要的朋友可以参... 目录1. 嵌入式系统与硬件寄存器操作2. 网络协议解析3. 图像处理与颜色编码4. 高效处理布尔标志集合

Java中的Lambda表达式及其应用小结

《Java中的Lambda表达式及其应用小结》Java中的Lambda表达式是一项极具创新性的特性,它使得Java代码更加简洁和高效,尤其是在集合操作和并行处理方面,:本文主要介绍Java中的La... 目录前言1. 什么是Lambda表达式?2. Lambda表达式的基本语法例子1:最简单的Lambda表

Python结合PyWebView库打造跨平台桌面应用

《Python结合PyWebView库打造跨平台桌面应用》随着Web技术的发展,将HTML/CSS/JavaScript与Python结合构建桌面应用成为可能,本文将系统讲解如何使用PyWebView... 目录一、技术原理与优势分析1.1 架构原理1.2 核心优势二、开发环境搭建2.1 安装依赖2.2 验

Java字符串操作技巧之语法、示例与应用场景分析

《Java字符串操作技巧之语法、示例与应用场景分析》在Java算法题和日常开发中,字符串处理是必备的核心技能,本文全面梳理Java中字符串的常用操作语法,结合代码示例、应用场景和避坑指南,可快速掌握字... 目录引言1. 基础操作1.1 创建字符串1.2 获取长度1.3 访问字符2. 字符串处理2.1 子字

IDEA自动生成注释模板的配置教程

《IDEA自动生成注释模板的配置教程》本文介绍了如何在IntelliJIDEA中配置类和方法的注释模板,包括自动生成项目名称、包名、日期和时间等内容,以及如何定制参数和返回值的注释格式,需要的朋友可以... 目录项目场景配置方法类注释模板定义类开头的注释步骤类注释效果方法注释模板定义方法开头的注释步骤方法注

Python如何自动生成环境依赖包requirements

《Python如何自动生成环境依赖包requirements》:本文主要介绍Python如何自动生成环境依赖包requirements问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑... 目录生成当前 python 环境 安装的所有依赖包1、命令2、常见问题只生成当前 项目 的所有依赖包1、

SpringShell命令行之交互式Shell应用开发方式

《SpringShell命令行之交互式Shell应用开发方式》本文将深入探讨SpringShell的核心特性、实现方式及应用场景,帮助开发者掌握这一强大工具,具有很好的参考价值,希望对大家有所帮助,如... 目录引言一、Spring Shell概述二、创建命令类三、命令参数处理四、命令分组与帮助系统五、自定

SpringBoot应用中出现的Full GC问题的场景与解决

《SpringBoot应用中出现的FullGC问题的场景与解决》这篇文章主要为大家详细介绍了SpringBoot应用中出现的FullGC问题的场景与解决方法,文中的示例代码讲解详细,感兴趣的小伙伴可... 目录Full GC的原理与触发条件原理触发条件对Spring Boot应用的影响示例代码优化建议结论F

openCV中KNN算法的实现

《openCV中KNN算法的实现》KNN算法是一种简单且常用的分类算法,本文主要介绍了openCV中KNN算法的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的... 目录KNN算法流程使用OpenCV实现KNNOpenCV 是一个开源的跨平台计算机视觉库,它提供了各

MySQL 分区与分库分表策略应用小结

《MySQL分区与分库分表策略应用小结》在大数据量、复杂查询和高并发的应用场景下,单一数据库往往难以满足性能和扩展性的要求,本文将详细介绍这两种策略的基本概念、实现方法及优缺点,并通过实际案例展示如... 目录mysql 分区与分库分表策略1. 数据库水平拆分的背景2. MySQL 分区策略2.1 分区概念