最小生成树的扩展应用

news2024/10/26 7:30:21

1146. 新的开始 - AcWing题库 

//建立一个虚拟远点
import java.util.*;

public class Main{
    static int N = 310;
    static int[][] w = new int[N][N];
    static int[] dist = new int[N];
    static boolean[] st = new boolean[N];
    static int n, res;
    
    public static int prim(){
        Arrays.fill(dist, 0x3f3f3f3f);
        dist[0] = 0;

        for(int i = 0; i < n + 1; i ++){
            int t = -1;
            for(int j = 0; j < n + 1; j ++){
                if(!st[j] && (t == -1 || dist[t] > dist[j])){
                    t = j;
                }
            }
            st[t] = true;
            res += dist[t];
            
            for(int j = 0; j < n + 1; j ++){
                dist[j] = Math.min(dist[j], w[t][j]);//t点到这个点的距离短还是虚拟远点到这个点的距离短
            }
        }
        return res;
    }
    
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        n = sc.nextInt();
        
        for(int i = 1; i <= n; i ++){//虚拟远点到每个点的距离
            w[0][i] = sc.nextInt();
            w[i][0] = w[0][i];
        }
        
        for(int i = 1; i <= n; i ++){
            for(int j = 1; j <= n; j ++){
                w[i][j] = sc.nextInt();
            }
        }
        
        System.out.print(prim());
    }
}

1145. 北极通讯网络 - AcWing题库

找到一个最小的d值,将所有权值大于d的边删去,整个图形连通块的数量不超过k条 

import java.util.*;

class PII_1{
    int x, y;
    public PII_1(int x, int y){
        this.x = x;
        this.y = y;
    }
}

class PII_2 implements Comparable<PII_2>{
    int a, b;
    double c;
    public PII_2(int a, int b, double c){
        this.a = a;
        this.b = b;
        this.c = c;
    }
    
    public int compareTo(PII_2 o){
        return Double.compare(c, o.c);
    }
}

public class Main{
    static int N = 510, M = N * N;
    static PII_1[] a = new PII_1[M];
    static PII_2[] q = new PII_2[M];
    static int[] p = new int[M];
    static int n, k, m;
    
    public static double get_dist(PII_1 a, PII_1 b){
        int dx = a.x - b.x;
        int dy = a.y - b.y;
        return Math.sqrt(dx * dx + dy * dy);
    }
    
    public static int find(int x){
        if(p[x] != x) p[x] = find(p[x]);
        return p[x];
    }
    
    public static void Kruskal(){
        Arrays.sort(q, 0, m);//一定要记得排序
        
        int cnt = n;
        double res = 0.0;
        for(int i = 0; i < m; i ++){
            if(cnt <= k) break;
            int a = q[i].a;
            int b = q[i].b;
            double c = q[i].c;
            a = find(a);
            b = find(b);
            if(a != b){
                p[a] = b;
                cnt --;
                res = c;
            }
        }
        System.out.printf("%.2f", res);
    }
    
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        n = sc.nextInt();
        k = sc.nextInt();
        
        for(int i = 0; i < n; i ++) p[i] = i;
        
        for(int i = 0; i < n; i ++){
            int x = sc.nextInt();
            int y = sc.nextInt();
            a[i] = new PII_1(x, y);//每个村庄的坐标
        }
        
        for(int i = 0; i < n; i ++){
            for(int j = 0; j < n; j ++){//村庄与村庄之间两两的距离
                q[m ++] = new PII_2(i, j, get_dist(a[i], a[j]));
            }
        }
        
        Kruskal();
    }
}

 

346. 走廊泼水节 - AcWing题库

import java.util.*;

class PII implements Comparable<PII>{
    int a, b, c;
    public PII(int a, int b, int c){
        this.a = a;
        this.b = b;
        this.c = c;
    }
    public int compareTo(PII o){
        return Integer.compare(c, o.c);
    }
}

public class Main{
    static int N = 6010, n;
    static int[] p = new int[N];
    static int[] size = new int[N];
    static PII[] q = new PII[N];
    
    public static int find(int x){
        if(p[x] != x) p[x] = find(p[x]);
        return p[x];
    }
    
    public static void Kruskal(){
        Arrays.sort(q, 0, n - 1);
        int res = 0;
        
        for(int i = 0; i < n - 1; i ++){
            int a = q[i].a;
            int b = q[i].b;
            int c = q[i].c;
            a = find(a);
            b = find(b);
            if(a != b){
                res += (size[a] * size[b] - 1) * (c + 1);//权值加1
                p[a] = b;
                size[b] += size[a];
            }
        }
        System.out.println(res);
    }
    
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        int T = sc.nextInt();
        while(T -- > 0){
            n = sc.nextInt();
            for(int i = 1; i <= n; i ++){
                p[i] = i;
                size[i] = 1;
            }
            
            for(int i = 0; i < n - 1; i ++){
                int a = sc.nextInt();
                int b = sc.nextInt();
                int c = sc.nextInt();
                q[i] = new PII(a, b, c);//先把点加进去
            }
            
            Kruskal();
        }
    }
}

 

1148. 秘密的牛奶运输 - AcWing题库

次小生成树:

定义:给一个带权的图,把图的所有生成树按权值从小到大排序,第二小的称为次小生成树(有些题目最小生成树不唯一,次小生成树可以和最小生成树相等)

方法一:先求最小生成树,然后依次枚举删去最小生成树的边求解O(mlogm + nm)

                只能求出来非严格最小生成树。

方法二:先求最小生成树,然后依次枚举非树边,将该边加入到树中,同时从树中去掉一条                  边,使得最终的图仍是一棵树,则一定可以求出次小生成树。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1497266.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

vue3组件通信有哪几种方式?

文章目录 一、父子通信1、props2、模板引用ref和defineExpose 二、跨层级传递数据provid和inject 一、父子通信 1、props 父组件中给子组件绑定属性子组件内通过props选项接收 子传父&#xff0c;通过defineEmits,先声明事件&#xff0c;再emit触发 2、模板引用ref和define…

TC397 Tasking CMake Gitlab CI CD 环境配置

文章目录 Aurix Development Studio 新建工程与配置Tasking 环境配置CMake 集成Win CMake MinGW 安装Tasking Toolchain 工具链CMakeLists.txtPowershell 脚本 Gitlab CI CDGithub Link 本篇先演示了ADS新建激活编译工程, 讲述了浮点模型, 链接脚本文件, 静态库集成等的设置, 接…

SpringBoot 热部署。

SpringBoot 热部署。 文章目录 SpringBoot 热部署。 pom.xml。 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><scope>runtime</scope><optional>true</optional…

Java项目:40 springboot月度员工绩效考核管理系统009

作者主页&#xff1a;舒克日记 简介&#xff1a;Java领域优质创作者、Java项目、学习资料、技术互助 文中获取源码 项目介绍 本系统的功能分为管理员和员工两个角色 管理员的功能有&#xff1a; &#xff08;1&#xff09;个人中心管理功能&#xff0c;添加管理员账号和修改…

【JavaEE初阶 -- 计算机核心工作机制】

这里写目录标题 1.冯诺依曼体系2.CPU是怎么构成的3.指令表4.CPU执行代码的方式5.CPU小结&#xff1a;6.编程语言和操作系统7. 进程/任务&#xff08;Process/Task&#xff09;8.进程在系统中是如何管理的9. CPU分配 -- 进程调度10.内存分配 -- 内存管理11.进程间通信 1.冯诺依曼…

WordPress建站入门教程:phpMyAdmin4.8.5出现Fatal error: Unparenthesized错误怎么办?

我们在本地电脑使用小皮面板phpstudy安装phpMyAdmin4.8.5成功后&#xff0c;但是点击【管理】功能打开时却出现如下错误&#xff1a; Fatal error: Unparenthesized a ? b : c ? d : e is not supported. Use either (a ? b : c) ? d : e or a ? b : (c ? d : e) in D:\…

SD-WAN专线对本地网络有哪些要求?

SD-WAN&#xff08;软件定义广域网&#xff09;是一种新型的网络架构&#xff0c;通过软件定义的方式&#xff0c;将网络控制平面和数据转发平面进行分离&#xff0c;从而实现网络的灵活性、可编程性和自动化管理。在部署SD-WAN专线时&#xff0c;本地网络需要满足一些要求&…

M2TS转MP4怎么转?超快的方法~

M2TS格式的优点主要体现在对高清视频的完美支持&#xff0c;能够提供极致的视觉体验。然而&#xff0c;由于其相对较大的文件大小&#xff0c;有时可能不太适合网络传输。此外&#xff0c;部分不支持M2TS的播放设备可能导致一定的兼容性问题。 想要播放m2ts视频&#xff0c;可…

C语言内存优化实用指南

一、引言 在C语言编程中&#xff0c;内存管理是一项至关重要的任务。有效的内存优化可以提升程序的性能&#xff0c;减少资源消耗&#xff0c;并防止可能出现的内存泄漏和溢出问题。以下是一些关于C语言内存优化的实用指南。 二、理解内存管理 在C语言中&#xff0c;程序员需…

【思考】crud接口命名规范

写代码时取名字真的是痛苦。 方法命名 1、阿里命名规范 Service/Dao 层命名规约 1&#xff09; 获取单个对象的方法用 get 做前缀。 2&#xff09; 获取多个对象的方法用 list 做前缀。 3&#xff09; 获取统计值的方法用 count 做前缀。 4&#xff09; 插入的方法用 save&am…

如何快速接入 使用Claude 3 opus和Claude 3 sonnet?最简单的Claude 3接入方法

3 月 4 日&#xff0c;被称为 OpenAI 最强竞争对手的大模型公司 Anthropic 宣布推出 Claude3 系列模型&#xff0c;与 Gemini 类似&#xff0c;模型按照大小分为三个&#xff1a;Claude 3 Haiku、Claude 3 Sonnet 和 Claude 3 Opus。Opus 目前在官方发布的测试成绩中全方位超越…

航芯1-Wire安全认证新品上市,防抄板和耗材认证高性价比之选

随着用户产品附加值提升带来的对防抄板的需求&#xff0c;以及电池、医疗耗材、电子配件、IOT领域中对设备认证的需求&#xff0c;上海航芯经过多年的技术积累和对市场的理解&#xff0c;推出了高性价比的ACL16_Axx系列。 1-Wire单总线&#xff1a;小尺寸实现高效传输 ACL16_…

python_读取txt文件绘制多条曲线III

先把文件中指定列&#xff0c;去重提取出来&#xff0c;然后根据指定列去匹配数据&#xff0c;最后完成多条数据的绘图&#xff1b; import matplotlib.pyplot as plt import re from datetime import datetime from pylab import mplmpl.rcParams["font.sans-serif"…

算法沉淀——动态规划之其它背包问题与卡特兰数(leetcode真题剖析)

算法沉淀——动态规划之其它背包问题与卡特兰数 二维费用的背包问题01.一和零02.盈利计划 似包非包组合总和 Ⅳ 卡特兰数不同的二叉搜索树 二维费用的背包问题 01.一和零 题目链接&#xff1a;https://leetcode.cn/problems/ones-and-zeroes/ 给你一个二进制字符串数组 strs…

selenium中ChromeDriver配置,一把过,并且教你伪装

最近正值毕业季&#xff0c;我之前不是写了个问卷星代码嘛&#xff0c;昨晚上有人凌晨1点加我&#xff0c;问我相关内容。 由于我之前C盘重装了一下&#xff0c;导致我很多东西空有其表&#xff0c;实际不能用&#xff0c;借此机会&#xff0c;向大家编写ChromeDriver配置&…

Nginx启动服务

Nginx启动服务 一、启动前置 下载地址 如已安装Docker&#xff0c;下一步拉取Nginx最新的Docker镜像&#xff1a; docker pull nginx:latest查看拉取下来的镜像&#xff1a; docker images二、启动服务 创建Docker容器&#xff1a; docker run --name {projectname} -p 80…

开发充电桩APP提高管理效能

随着社会的发展&#xff0c;电动车已经成为城市交通的重要组成部分&#xff0c;用户所下载的充电类的APP也非常大&#xff0c;而充电桩的建设和利用效率成为了一个亟待解决的问题。在这个背景下&#xff0c;物联网技术的应用成为了提高充电桩效能的关键。虎克技术公司在此领域提…

3Dmax中VR渲染太阳光渲染参数怎么设置?渲染100云渲染助力

我们用3Dmax建模时一些场景会用到太阳光&#xff0c;那么渲染参数是如何设置的呢&#xff1f; 我们一起来看看&#xff0c;直接上图 以上就是详细的参数设置&#xff0c;大家可以用做参考&#xff0c;如果本地渲染慢的朋友可以考虑使用云渲染100 机器多&#xff0c;渲染稳定不…

Qt6.6搭建WebAssembly

1.首先安装python &#xff0c; 链接&#xff1a;https://www.python.org/ 2.下载并安装qt6. 3.克隆emsdk工程 3.1 进入emsdk目录&#xff0c;然后更新emsdk代码 3.2 下载并安装最新的SDK工具。&#xff08;C:\Qt\emsdk>emsdk install --global latest&#xff09; 3.3…

收银系统源码-智慧新零售2.0小助手全新升级!

欢迎后台私信&#xff0c;测试体验&#xff01; 新零售助手是智慧新零售系统的移动管理端&#xff0c;尤其针对商户/门店日常经营必不可少的一环。智慧新零售2.0版小助手也进行了全新升级&#xff0c;使用起来更简单&#xff0c;页面更美观。小助手采用微信小程序登陆&#xf…