当前位置: 首页 > news >正文

1144. 连接格点,Kruskal算法,二维矩阵压缩为一维

有一个 m 行 n 列的点阵,相邻两点可以相连。

一条纵向的连线花费一个单位,一条横向的连线花费两个单位。

某些点之间已经有连线了,试问至少还需要花费多少个单位才能使所有的点全部连通。

输入格式

第一行输入两个正整数 m 和 n。

以下若干行每行四个正整数 x1,y1,x2,y2,表示第 x1 行第 y1 列的点和第 x2 行第 y2 列的点已经有连线。

输入保证|x1−x2|+|y1−y2|=1。

输出格式

输出使得连通所有点还需要的最小花费。

数据范围

1≤m,n≤1000
0≤已经存在的连线数≤10000

输入样例:
2 2
1 1 2 1
输出样例:
3

 解析:AcWing 1144. 连接格点(算法提高课) - AcWing

 

#include<iostream>
#include<string>
#include<cstring>
#include<cmath>
#include<ctime>
#include<algorithm>
#include<utility>
#include<stack>
#include<queue>
#include<vector>
#include<set>
#include<math.h>
#include<map>using namespace std;
typedef long long LL;
const int N = 1e3+10, M = 2 * N * N;
int n, m,k;int fa[N * N],idx[N][N];
struct st {int a, b, c;
}e[M];int find(int a) {if (fa[a] == a)return fa[a];return fa[a] = find(fa[a]);
}void get() {int dx[4] = { 1,0,-1,0 }, dy[4] = { 0,1,0,-1 }, dw[4] = { 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], w = dw[u];if (x && x <= n && y && y <= m) {int a = idx[i][j], b = idx[x][y];if (a < b)e[++k] = { a,b,w };}}}}}}
}int main() {cin >> n >> m;for (int i = 1,t=1; i <= n; i++) {for (int j = 1; j <= m; j++,t++) {idx[i][j] = t;}}for (int i = 1; i <= n * m; i++)fa[i] = i;int x1, y, x2, y2;while (cin >> x1 >> y >> x2 >> y2) {fa[find(idx[x1][y])] = find(idx[x2][y2]);}get();int ans = 0;for (int i = 1; i <= k; i++) {int a = find(e[i].a), b = find(e[i].b), w = e[i].c;if (a != b) {fa[a] = b;ans += w;}}cout << ans << endl;return 0;
}

http://www.lryc.cn/news/246184.html

相关文章:

  • C++ : 友元(未完结)
  • Nginx 服务器 SSL 证书安装部署
  • GC9118S低压 5V 全桥驱动芯片,内置过温保护,低电流睡眠模式,可替代TMI8118
  • windows dockerdesktop 安装sqlserver2022
  • 在ubuntu系统安装SVN服务端,并通过客户端进行远程访问
  • STL函数对象-C++
  • Ubuntu 设置Nginx开机自启
  • npm中的npx命令
  • python绘制Z形图 青少年电子学会等级考试 中小学生python编程等级考试一级真题答案解析2023年5月
  • conda环境下module ‘PIL.Image‘ has no attribute ‘ANTIALIAS‘
  • 蓝桥杯每日一题2023.11.26
  • Centos 7.9 Install Docker Insecure Registry
  • 探秘网络通信:UDP与TCP/IP的奥秘
  • Docker的学习笔记
  • 解析直播第三方美颜SDK:技术原理与应用
  • 线程基本方法
  • Linux操作系统 1.初识Linux
  • 分布式事务-两阶段提交2PC
  • 初识Spring (Spring 核心与设计思想)
  • 智能优化算法应用:基于教与学算法无线传感器网络(WSN)覆盖优化 - 附代码
  • Bitcoin SV 和 Bitcoin Core 之间首次跨链原子交换
  • RT-DETR改进 | 2023 | InnerEIoU、InnerSIoU、InnerWIoU、InnerDIoU等二十余种损失函数
  • JDBC编程基础
  • Linux shell命令
  • Vue 3 面试经验分享
  • Vue简易的车牌输入键盘,可以根据需要修改
  • 十分钟搭建VScode C/C++运行环境
  • 控制台gbk乱码
  • Springboot日志-logback
  • 六、Lua 运算符