acwing算法提高之图论--最小生成树的典型应用

目录

  • 1 介绍
  • 2 训练

1 介绍

本专题用来记录使用prim算法或kruskal算法求解的题目。

2 训练

题目1:1140最短网络

C++代码如下,

#include <iostream>
#include <cstring>using namespace std;const int N = 110, INF = 0x3f3f3f3f;
int g[N][N];
int d[N];
bool st[N];
int n, m;void prim() {memset(d, 0x3f, sizeof d);int res = 0;for (int i = 0; i < n; ++i) {int t = -1;for (int j = 1; j <= n; ++j) {if (!st[j] && (t == -1 || d[t] > d[j])) {t = j;}}st[t] = true;if (i) res += d[t];for (int j = 1; j <= n; ++j) {if (d[j] > g[t][j]) {d[j] = g[t][j];}}}cout << res << endl;return;
}int main() {cin >> n;for (int i = 1; i <= n; ++i) {for (int j = 1; j <= n; ++j) {cin >> g[i][j];}}prim();return 0;
}

题目2:1141局域网

C++代码如下,

#include <iostream>
#include <cstring>
#include <algorithm>using namespace std;const int N = 110, M = 210;
int p[N];
int n, m;struct Edge {int a, b, w;bool operator< (const Edge &W) const {return w < W.w;}
}edges[M];int find(int x) {if (p[x] != x) p[x] = find(p[x]);return p[x];
}int main() {cin >> n >> m;int s = 0;for (int i = 0; i < m; ++i) {cin >> edges[i].a >> edges[i].b >> edges[i].w;s += edges[i].w;}for (int i = 1; i <= n; ++i) p[i] = i;sort(edges, edges + m);int res = 0, cnt = 0;for (int i = 0; i < m; ++i) {int a = edges[i].a, b = edges[i].b, w = edges[i].w;a = find(a);b = find(b);if (a != b) {p[a] = b;res += w;cnt++;}}cout << s - res << endl;return 0;
}

题目3:1142繁忙的都市

C++代码如下,

#include <iostream>
#include <cstring>
#include <algorithm>using namespace std;const int N = 310, M = 8010;
int n, m;
int p[N];struct Edge {int a, b, w;bool operator< (const Edge &W) const {return w < W.w;}
}edges[M];int find(int x) {if (p[x] != x) p[x] = find(p[x]);return p[x];
}int main() {cin >> n >> m;for (int i = 1; i <= n; ++i) p[i] = i;for (int i = 0; i < m; ++i) {cin >> edges[i].a >> edges[i].b >> edges[i].w;}sort(edges, edges + m);int res = 0;int cnt = 0;for (int i = 0; i < m; ++i) {int a = edges[i].a, b = edges[i].b, w = edges[i].w;a = find(a);b = find(b);if (a != b) {p[a] = b;cnt += 1;res = w;}}cout << cnt << " " << res << endl;return 0;
}

题目4:1143联络员

C++代码如下,

#include <iostream>
#include <cstring>
#include <algorithm>using namespace std;const int N = 2010, M = 10010;
int n, m;
int p[N];
struct Edge {int a, b, w;bool operator< (const Edge &W) const {return w < W.w;}
}edges[M];int find(int x) {if (p[x] != x) p[x] = find(p[x]);return p[x];
}int main() {cin >> n >> m;for (int i = 1; i <= n; ++i) p[i] = i;int res = 0;int j = 0;for (int i = 0; i < m; ++i) {int op, a, b, w;cin >> op >> a >> b >> w;if (op == 1) {res += w;a = find(a);b = find(b);if (a != b) {p[a] = b;}} else if (op == 2) {edges[j] = {a, b, w};j += 1;}}sort(edges, edges + j);for (int i = 0; i < j; ++i) {int a = edges[i].a, b = edges[i].b, w = edges[i].w;a = find(a);b = find(b);if (a != b) {p[a] = b;res += w;}}cout << res << endl;return 0;
}

题目5:1144连接格点

C++代码如下,

#include <iostream>
#include <cstring>
#include <algorithm>using namespace std;const int N = 1e6 + 10, M = 2 * N;
int n, m;
int p[N];struct Edge {int a, b, w;bool operator< (const Edge &W) const {return w < W.w;}
}edges[M];int find(int x) {if (p[x] != x) p[x] = find(p[x]);return p[x];
}int main() {cin >> n >> m;for (int i = 1; i <= n * m; ++i) p[i] = i;int x1, y1, x2, y2;while (cin >> x1 >> y1 >> x2 >> y2) {int w = 0;if (x1 == x2) w = 2;else w = 1;int a = (x1 - 1) * m + y1;int b = (x2 - 1) * m + y2;a = find(p[a]);b = find(p[b]);if (a != b) {p[a] = b;}}int k = 0;for (int i = 1; i <= n; ++i) {for (int j = 1; j < m; ++j) {//(i,j) -> (i,j+1)int a = (i - 1) * m + j;int b = (i - 1) * m + j + 1;edges[k] = {a, b, 2};k += 1;//cout << "a = " << a << ", b = " << b << endl;}}//cout << "===" << endl;for (int j = 1; j <= m; ++j) {for (int i = 1; i < n; ++i) {//(i,j) -> (i+1,j)int a = (i - 1) * m + j;int b = i * m + j;edges[k] = {a, b, 1};k += 1;            //cout << "a = " << a << ", b = " << b << endl;}}sort(edges, edges + k);int res = 0;for (int i = 0; i < k; ++i) {int a = edges[i].a, b = edges[i].b, w = edges[i].w;a = find(a);b = find(b);if (a != b) {p[a] = b;res += w;}}cout << res << endl;return 0;
}

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

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

相关文章

(C)1008 数组元素循环右移问题

1008 数组元素循环右移问题&#xff1a; 问题描述 输入样例&#xff1a; 6 2 1 2 3 4 5 6 输出样例&#xff1a; 5 6 1 2 3 4 解决方案&#xff1a; #include<stdio.h> #include<string.h> #include<math.h> int main(){int n,k,flag,y,x,final;int a[10000…

Flutter Boost 3

社区的 issue 没有收敛的趋势。 设计过于复杂&#xff0c;概念太多。这让一个新手看 FlutterBoost 的代码很吃力。 这些问题促使我们重新梳理设计&#xff0c;为了彻底解决这些顽固的问题&#xff0c;我们做一次大升级&#xff0c;我们把这次升级命名为 FlutterBoost 3.0&am…

合理早餐选择,稳定糖尿病血糖。

对于糖尿病患者来说&#xff0c;饮食管理是治疗的重要一环。不合理的早餐选择会导致血糖的波动。很多糖尿病朋友按时吃药&#xff0c;但是血糖就是稳定不住&#xff0c;之前看过一个例子&#xff0c;北京崇文门医院朱学敏主任接诊过一个患者&#xff0c;那个患者按时吃药&#…

LaTeX 空格与换行

任意多个空格与一个空格的功能相同。只有字符后面的空格是有效的&#xff0c;每行最前面的空格被忽略。单个换行被视作一个空格&#xff0c;连续两个换行表示分段。~被称作一种不可打断的空格&#xff0c;排版系统不会在这种空格之间换行。西文的逗号、句号和分号等标点后面应该…

Java | Leetcode Java题解之第8题字符串转换整数atoi

题目&#xff1a; 题解&#xff1a; class Solution {public int myAtoi(String str) {Automaton automaton new Automaton();int length str.length();for (int i 0; i < length; i) {automaton.get(str.charAt(i));}return (int) (automaton.sign * automaton.ans);} …

Android Studio学习10——资源res的使用

一、String,StringArray的使用 一次修改&#xff0c;多出生效 String StringArray 二、color的使用 颜色代码对应表 和上面的相似用法 三、Dimen(尺寸)的使用 用的少&#xff0c;一般直接写尺寸 四、如何写一个drawable作为背景 五、如何写一个可以改变的drawable(按钮按下…

IP地址:是给主机配置的,还是给网卡配置的?

在探索网络的奥秘时&#xff0c;我们经常会遇到一个看似简单但又复杂的问题&#xff1a;IP地址到底是配置在主机上&#xff0c;还是配置在网卡上&#xff1f;为什么我们通常说的是“主机IP地址”呢&#xff1f;让我们一起深入探讨。 1. 网卡与IP地址 &#x1f5a5;️&#x1f…

利用OllyDbg对程序内容进行修改实验

1.双击运行exe文件&#xff0c;出现如下弹窗 2.用ollydbg工具打开该执行文件&#xff0c;页面显示如下 3.在注释窗口执行以下操作 4.双击运行exe文件时&#xff0c;显示”Copied!”所以接下来在注释里找到这个字样&#xff0c;如下&#xff0c;我们需要把对话框中的内容修改为“…

SQL语句学习+牛客基础39SQL

什么是SQL&#xff1f; SQL (Structured Query Language:结构化查询语言) 是用于管理关系数据库管理系统&#xff08;RDBMS&#xff09;。 SQL 的范围包括数据插入、查询、更新和删除&#xff0c;数据库模式创建和修改&#xff0c;以及数据访问控制。 SQL语法 数据库表 一个…

ChatGPT(3.5版本)开放无需注册:算力背后的数据之战悄然打响

✨✨ 欢迎大家来访Srlua的博文&#xff08;づ&#xffe3;3&#xffe3;&#xff09;づ╭❤&#xff5e;✨✨ &#x1f31f;&#x1f31f; 欢迎各位亲爱的读者&#xff0c;感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢&#xff0c;在这里我会分享我的知识和经验。&am…

90天玩转Python-02-基础知识篇:初识Python与PyCharm

90天玩转Python-02-基础知识篇:初识Python与PyCharm 一、引言 二、Python语言探秘 三、如何学习Python 四、PyCharm IDE的安装与使用 安装步骤: 五、Python编程实例 实例1:列表操作

如何在 Mac 上恢复已删除的数据

如果您丢失了 Mac 上的数据&#xff0c;请不要绝望。恢复数据比您想象的要容易&#xff0c;并且有很多方法可以尝试。 在 Mac 上遭受数据丢失是每个人都认为永远不会发生在他们身上的事情之一......直到它发生。不过&#xff0c;请不要担心&#xff0c;因为您可以通过多种方法…

Java数据结构队列

队列(Queue) 概念 队列的使用 注意&#xff1a;Queue是个接口&#xff0c;在实例化时必须实例化LinkedList的对象&#xff0c;因为LinkedList实现了Queue接口。 import java.util.LinkedList; import java.util.Queue;public class Test {public static void main(String[]…

【事务注解✈️✈️】@Transactional注解在不同参数配置下的功能实现

目录 前言 使用场景 1.单个方法层面 2.类级别使用 3.指定异常回滚 4.跨方法调用事务管理 5.只读事务 ​ 6.设置超时时间&#xff0c;超时则自动回滚 7.隔离级别设置 章末 前言 小伙伴们大家好&#xff0c;ACID&#xff08;原子性&#xff0c;一致性&#xff0c;隔离…

用递归方法求n!(n的值最好小于13,int型数据分配4个字节,能表示的最大数为2147483647)

#include <stdio.h> // 主函数&#xff1a;计算并输出给定整数的阶乘 int main(){ // 声明阶乘函数 int fac(int n); int n, y; // 输入一个整型数字 printf("请输入一个整型数字:"); scanf("%d", &n); …

网络安全 | 什么是单点登录SSO?

关注WX&#xff1a;CodingTechWork SSO-概念 单点登录 (SSO) 是一种身份认证方法&#xff0c;用户一次可通过一组登录凭证登入会话&#xff0c;在该次会话期间无需再次登录&#xff0c;即可安全访问多个相关的应用和服务。SSO 通常用于管理一些环境中的身份验证&#xff0c;包…

Arcade 作用力

这个程序展示了简单的变换反馈的应用。变换反馈类似于渲染&#xff0c;但是输出的是一个缓冲区而不是帧缓冲区/屏幕。 这个例子展示了一个常见的ping-pong技术&#xff0c;即在两个缓冲区之间对具有位置和速度的点进行变换&#xff0c;这样我们就始终在前一状态上工作。 初始…

c++算法学习笔记 (21) STL

1.vector: 变长数组&#xff0c;倍增的思想 size()返回元素个数 empty()返回是否为空 clear()清空 front()/back()元素 push_back()/pop_back() begin()/end()迭代器 [] 支持比较运算 2.pair<int,int>: first:第一个元素 second:第二个元素 支持比较运算&#xff0c;先比…

基于Python近红外光谱分析与机器学、深度学习方法融合技术应用

郁磊副教授&#xff0c;主要从事MATLAB 编程、机器学习与数据挖掘、数据可视化和软件开发、人工智能近红外光谱分析、生物医学系统建模与仿真&#xff0c;具有丰富的实战应用经验&#xff0c;主编《MATLAB智能算法30个案例分析》、《MATLAB神经网络43个案例分析》相关著作。已发…

基于Spark中随机森林模型的天气预测系统

基于Spark中随机森林模型的天气预测系统 在这篇文章中&#xff0c;我们将探讨如何使用Apache Spark和随机森林算法来构建一个天气预测系统。该系统将利用历史天气数据&#xff0c;通过机器学习模型预测未来的天气情况&#xff0c;特别是针对是否下雨的二元分类问题。 简介 Ap…