最小生成树的典型应用

2024-02-01(最小生成树,二分图)-CSDN博客

如何证明当前这条边可以被选?

        假设不选当前边,得到了一棵树,然后将这条边加上,那么必然会出现一个环,在这个环上,一定可以找出一条不小于当前边的边,那么把当前边替换上去,结果一定不会变差。

1140. 最短网络 - AcWing题库 

Prim算法  裸题 

import java.util.*;public class Main{static int N = 110;static int n, res;static int[][] g = new int[N][N];static int[] dist = new int[N];//连通块外的其他点到连通块的最短距离static boolean[] st = new boolean[N];//是否在联通块内public static void prim(){Arrays.fill(dist, 0x3f3f3f3f);dist[1] = 0;res = 0;for(int i = 1; i <= n; i ++){int t = -1;for(int j = 1; j <= n; j ++){if(!st[j] && (t == -1 || dist[t] > dist[j])){t = j;}}if(dist[t] == 0x3f3f3f3f) return;//不连通,直接返回res += dist[t];st[t] = true;for(int j = 1; j <= n; j ++){//更新其他点到连通块的距离dist[j] = Math.min(dist[j], g[t][j]);}}System.out.print(res);return;}public static void main(String[] args){Scanner sc = new Scanner(System.in);n = sc.nextInt();for(int i = 1; i <= n; i ++){for(int j = 1; j <= n; j ++){g[i][j] = sc.nextInt();}}prim();}
}

 

1141. 局域网 - AcWing题库

相当于在这个图的每个连通块内的一棵最小生成树,相当于求原图的“最小生成森林”。 

  Kruskal算法:

1.将所有的边权从小到大排序

2.依次枚举每条边的a, b, w, 如果a,b不连通,那么就将当前边加入最小生成树中去。

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 c - o.c;}
}public class Main{static int N = 210;static int n, m, sum;static int[] p = 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 int Kruskal(){Arrays.sort(q, 1, m + 1);int res = 0;for(int i = 1; i <= m; 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){//是否在同一个连通块中p[a] = b;res += c;//最小生成树的权重之和}}return res;}public static void main(String[] args){Scanner sc = new Scanner(System.in);n = sc.nextInt();m = sc.nextInt();for(int i = 1; i <= n; i ++) p[i] = i;for(int i = 1; i <= m; i ++){int a = sc.nextInt();int b = sc.nextInt();int c = sc.nextInt();q[i] = new PII(a, b, c);sum += c;}System.out.print(sum - Kruskal());}
}

 

1142. 繁忙的都市 - AcWing题库

普通最小生成树:权值之和最小

本题:最大权值最小 

 1.将所有边从小到大排序

 2.从小到大依次枚举每条边a,b,w

     如果a,b已经连通,直接pass

     如果a,b不连通,那么直接将这条边选出来

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 c - o.c;}
}public class Main{static int N = 310, M = 10010;static int n, m, res, cnt;static int[] p = new int[N];static PII[] q = new PII[M];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, 1, m + 1);for(int i = 1; i <= m; 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){p[a] = b;cnt ++;res = Math.max(res, c);}}System.out.print(cnt + " " + res);}public static void main(String[] args){Scanner sc = new Scanner(System.in);n = sc.nextInt();m = sc.nextInt();for(int i = 1; i <= n; i ++){p[i] = i;}for(int i = 1; i <= m; i ++){int a = sc.nextInt();int b = sc.nextInt();int c = sc.nextInt();q[i] = new PII(a, b, c);}Kruskal();}
}

 

1143. 联络员 - AcWing题库

//1.先将所有必选边加入并查集
//2.将所有非必选边从小到大排序
//3.依次枚举所有非必选边a,b,w
//  如果a,b联通,直接pass,如果不联通,就将当前边选上

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 c - o.c;}
}public class Main{static int N = 2010, M = 10010;static int n, m, res, k;static int[] p = new int[N];static PII[] q = new PII[M];public static int find(int x){if(p[x] != x) p[x] = find(p[x]);return p[x];}public static void Krustral(){Arrays.sort(q, 0, k);for(int i = 0; i < k; 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){p[a] = b;res += c;}}System.out.print(res);}public static void main(String[] args){Scanner sc = new Scanner(System.in);n = sc.nextInt();m = sc.nextInt();for(int i = 1; i <= n; i ++){p[i] = i;}for(int i = 1; i <= m; i ++){int t = sc.nextInt();int a = sc.nextInt();int b = sc.nextInt();int c = sc.nextInt();if(t == 1){p[find(a)] = find(b);res += c;}else{q[k ++] = new PII(a, b, c);}}Krustral();}
}

 

1144. 连接格点 - 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 c - o.c;}
}public class Main{static int N = 1010, M = N * N, K = 2 * M;static int n, m, k, res;static PII[] q = new PII[K];static int[] p = new int[M];static int[][] g = new int[N][N];public static int find(int x){if(x != p[x]) p[x] = find(p[x]);return p[x];}public static void get_PII(){int[] dx = {-1, 0, 1, 0}, dy = {0, 1, 0, -1}, dw = {1, 2, 1, 2};for(int z = 0; z < 2; z ++){for(int i = 1; i <= n; i ++){for(int j = 1; j <= m; j ++){for(int u = 0; u < 4; u ++){if(u % 2 == z){int x = i + dx[u], y = j + dy[u];if(x <= 0 || y <= 0 || x > n || y > m) continue;int a = g[i][j], b = g[x][y], w = dw[u];if(a < b) q[k ++] = new PII(a, b, w);}}}}}}public static void main(String[] args){Scanner sc = new Scanner(System.in);n = sc.nextInt();m = sc.nextInt();for(int i = 1; i <= n * m; i ++){p[i] = i;}int cnt = 0;for(int i = 1; i <= n; i ++){//给每个点编号for(int j = 1; j <= m; j ++){g[i][j] = ++ cnt;}}get_PII();while(sc.hasNext()){int x1 = sc.nextInt();int y1 = sc.nextInt();int x2 = sc.nextInt();int y2 = sc.nextInt();int a = g[x1][y1], b = g[x2][y2];p[find(a)] = find(b);}for(int i = 0; i < k; 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){p[a] = b;res += c;}}System.out.print(res);}
}

 

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

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

相关文章

超分辨率(1)--基于GAN网络实现图像超分辨率重建

目录 一.项目介绍 二.项目流程详解 2.1.数据加载与配置 2.2.构建生成网络 2.3.构建判别网络 2.4.VGG特征提取网络 2.5.损失函数 三.完整代码 四.数据集 五.测试网络 一.项目介绍 超分辨率&#xff08;Super-Resolution&#xff09;&#xff0c;简称超分&#xff08…

云计算OpenStack KVM迁移

动态迁移 static migration 静态迁移 cold migration 冷迁移 offline migration 离线迁移 live migration 动态迁移 hot migration 热迁移 online migration 在线迁移 衡量 整体迁移时间 服务器停机时间 性能影响(迁移后和其它客户机) 特点 负载均衡 解除硬件依赖…

Android动态添加view设置view大小(宽高)

动态生成view并添加到布局开源框架&#xff1a;Dynamico GitHub - jelic98/dynamico: Android library for inflating dynamic layouts in runtime based on JSON configuration fetched from server 第一种&#xff1a;ViewGroup在添加子view的时候设置layoutParams public…

pyinstaller 如何打包python 代码

本次文章主要介绍&#xff0c;pyinstaller 打包 python 常见的问题&#xff0c;以及解决办法 1、安装 pip install pyinstaller2、使用最全面的 spec 配置文件方法打包 介绍&#xff1a; root |_ test | |_ main.py |_custom_module |_config 如上&#xff1a; 在 root 下有…

List 集合手动分页

小伙伴们好&#xff0c;欢迎关注&#xff0c;一起学习&#xff0c;无限进步 为方便测试&#xff0c;可以直接在 controller 内添加一个方法&#xff0c;或者直接通过 main 方法测试 List 手动分页&#xff1a; GetMapping("/getUserInfo")public Map<String,Obje…

领腾讯云红包,可抵扣云服务器订单金额

在2024年腾讯云新春采购节优惠活动上&#xff0c;可以领取新年惊喜红包&#xff0c;打开活动链接 https://curl.qcloud.com/oRMoSucP 会自动弹出红包领取窗口&#xff0c;如下图&#xff1a; 腾讯云2024新春采购节红包领取 如上图所示&#xff0c;点击“领”红包&#xff0c;每…

信用卡选购要点

文章目录 额度银行联名卡年费福利其他 额度 一般四大行的信用卡审批门槛高&#xff0c;且发卡的额度偏低。 额度也可以通过后期的消费与规律还款获得持续提升。 银行 信用卡一般是网上办理相关业务&#xff0c;对线下网点依赖不大。但是所在城市有信用卡所属银行&#xff0…

【S32K3 MCAL配置】-1.1-GPIO配置及其应用-点亮LED灯(基于MCAL)

目录(共13页精讲,手把手教你S32K3从入门到精通) 实现的架构:基于MCAL层 前期准备工作: 1 创建一个FREERTOS工程

proxysql 2.6部署代理MGR集群读写分离

官方文档 https://proxysql.com/documentation/ProxySQL-Configuration/ 下载安装proxysql https://github.com/sysown/proxysql/releases/download/v2.6.0/proxysql-2.6.0-1-centos7.x86_64.rpmyum -y localinstall proxysql-2.6.0-1-centos7.x86_64.rpm # 软链接数据目录 …

ASPICE实操中的那点事儿-如何解决上、下游一致性难以保证的问题

写在前面 ASPICE理解起来容易&#xff0c;毕竟是有条有理的。但实操起来&#xff0c;尤其是把ASPICE各过程域做全的时候&#xff0c;会遇到各种各样的问题&#xff08;不是技术问题有多难&#xff0c;而是该如何做选择&#xff0c;如何既能符合ASPICE要求&#xff0c;保证过程质…

外包干了10天,技术退步明显。。。。。

先说一下自己的情况&#xff0c;本科生&#xff0c;2019年我通过校招踏入了南京一家软件公司&#xff0c;开始了我的职业生涯。那时的我&#xff0c;满怀热血和憧憬&#xff0c;期待着在这个行业中闯出一片天地。然而&#xff0c;随着时间的推移&#xff0c;我发现自己逐渐陷入…

Java必须掌握的莫夫曼树(含面试大厂题和源码)

面试题&#xff1a;构建哈夫曼树 相关知识点&#xff1a; 哈夫曼树&#xff08;Huffman Tree&#xff09;&#xff1a;哈夫曼树是一种用于数据压缩的树形结构。它是一种最优二叉树&#xff0c;其特点是频率高的字符出现在树的顶部&#xff0c;频率低的字符出现在树的底部&…

2024年阿里云域名优惠口令更新,亲测有效口令大全

2024年阿里云域名优惠口令&#xff0c;com域名续费优惠口令“com批量注册更享优惠”&#xff0c;cn域名续费优惠口令“cn注册多个价格更优”&#xff0c;cn域名注册优惠口令“互联网上的中国标识”&#xff0c;阿里云优惠口令是域名专属的优惠码&#xff0c;可用于域名注册、续…

OCR图片预处理之去除红色水印

import cv2 读取图像 src cv2.imread(“page-2_0.jpg”) if src is None: print(“Fail to open image!”) exit() 将图像转换为灰度图 gray cv2.cvtColor(src, cv2.COLOR_BGR2GRAY) # 全局二值化 th 180 # 阈值要根据实际情况调整 binary cv2.threshold(gray, t…

aiofiles,一个超酷的 Python 异步编程库!

目录 前言 什么是aiofiles库&#xff1f; 安装aiofiles库 基本功能 1. 异步打开文件 2. 异步读取文件 3. 异步写入文件 4. 异步追加内容到文件 应用场景 1. 异步Web服务器 2. 异步数据处理 3. 异步日志记录 总结 前言 大家好&#xff0c;今天为大家分享一个超酷的 Pytho…

stack/queue

链表完了之后就是我们的栈和队列了&#xff0c;当然我们的STL中也有实现&#xff0c;下面我们先来看一下简单用法&#xff0c;跟我们之前C语言实现的一样&#xff0c;stack和queue有这么几个重要的成员函数 最主要的就是这么几个&#xff1a;empty&#xff0c;push&#xff0c;…

Spring揭秘:ImportBeanDefinitionRegistrar应用场景及实现原理!

内容概念 ImportBeanDefinitionRegistrar接口提供了强大的动态注册Bean的能力&#xff0c;它允许开发者在Spring容器初始化时&#xff0c;灵活地根据特定条件或需求来添加或修改Bean定义&#xff0c;从而实现更为精细的控制和扩展性。这是构建可扩展框架、插件系统或处理复杂配…

2024.03.05作业

select实现tcp并发服务器 #include "test.h"#define SER_IP "192.168.42.106" #define SER_PORT 8888int create_socket() {int sfd socket(AF_INET, SOCK_STREAM, 0);if(sfd -1){perror("socket error");exit(-1);}printf("sfd %d\n&q…

安装VMWare+创建Linux虚拟机

点击VMware官网进入官网&#xff0c;下载VMware安装包。 一、安装VMware 一、安装VMware软件 &#xff08;1&#xff09;点击下一步 &#xff08;2&#xff09;勾选“我接受许可协议中的条款”&#xff0c;再点 ”击下一步“。 &#xff08;3&#xff09;选择下一步&#xf…

Linux编程3.2 进程-C程序启动过程

正常情况Linux 启动流程&#xff1a; ① BIOS 启动&#xff0c;完成自检&#xff0c;选择启动硬件 ②如果是磁盘系统读取 MBR ③从 MBR 指示&#xff0c;找到 GRUB 所在分区&#xff0c;加载 GRUB 显示菜单 ④加载 Linux 内核到内存中 ⑤执行 INIT 程序 ⑥进入用户界面 1、内核…