最小生成树(习题)

news/2024/7/15 17:18:37 标签: 算法, c++, 图论

拆地毯

 这个就是套用最小生成树的模板,只不过要将sort函数改成从大到小进行排序。然后这个退出条件是只要大于k就退出。
代码如下
 

#include<iostream>
#include<cmath>
#include<algorithm>
#define N 1009000
using namespace std;
int n,m,k;
struct node
{
	int x, y;
	int z;
}q[N];
int fa[N];
int cha(int x)
{
	return fa[x] == x ? x : fa[x] = cha(fa[x]);
}
void Union(int x, int y)
{
	x = cha(x);
	y = cha(y);
	if (x == y) return;
	if(x!=y)
	{
		fa[x] = y;
	}
}
bool cmp(node x, node y)
{
	return x.z > y.z;
}
int main()
{
	
	cin>>n>>m>>k;
	for(int i=1;i<=m;i++)
	{
		cin>>q[i].x>>q[i].y>>q[i].z;
	}
	for (int i = 1; i <= N - 10; i++)
	{
		fa[i] = i;
	}
	sort(q + 1, q + 1 + m, cmp);
	int ans=0;
	int tmp=0;
	for (int i = 1; i <= m; i++)
	{
		if(cha(q[i].x)!=cha(q[i].y))
		{
			Union(q[i].x,q[i].y);
			ans+=q[i].z;
			tmp++;
			if(tmp>=k)
			{
				printf("%d\n",ans);
				return 0;
			}
		}
	}

	return 0;
}

营救

这题也是最小生成树的模板,只需要将设置一个打擂台的模板,将每一次比较的最大值记录下来就可以了
代码如下

#include<iostream>
#include<algorithm>
#define N 1000000
using namespace std;
int fa[N];
struct node
{
	int x,y,z;
}q[N];
bool cmp(node x,node y)
{
	return x.z<y.z;
}
int cha(int x){
	return fa[x]==x?x:fa[x]=cha(fa[x]);
}
void Union(int x,int y)
{
	x=cha(x);
	y=cha(y);
	if(x==y)return ;
	else
	{
		fa[x]=y;
	}
}
int n,m,s,t;
int main()
{
	int ans=0;
	cin>>n>>m>>s>>t;
	for(int i=1;i<=N-10;i++)
	fa[i]=i;
	for(int i=1;i<=m;i++)
	{
		cin>>q[i].x>>q[i].y>>q[i].z;
	}
	sort(q+1,q+1+m,cmp);
	for(int i=1;i<=m;i++)
	{
		if(cha(q[i].x)!=cha(q[i].y))
		{
			Union(q[i].x,q[i].y);
			ans=max(ans,q[i].z);
			if(cha(s)==cha(t))
			{
				cout<<ans<<endl;
				return 0;
			}
		}
	}
	return 0;
}
                      

 


http://www.niftyadmin.cn/n/5379305.html

相关文章

C语言第二十六弹---字符串函数(下)

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】 目录 1、strncat 函数的使用 2、strncmp 函数的使用 3、strstr 函数的使用和模拟实现 4、strtok 函数的使用 5、strerror 函数的使用 6、perror 函数的使用…

蓝桥杯刷题--python-7

0幸运数字 - 蓝桥云课 (lanqiao.cn) count = 0def add_sum(num):nums = []for i in num:nums.append(int(i))return sum(nums)for i in range(1, 999999):if count < 2023:bin_num = bin(i)[2:]oct_num = oct(i)[2:]hex_num = hex(i)[2:]tm = []for j in hex_num:tm.append(…

4 存储器管理(上)

存储管理的管理目标&#xff1a; 内存的合理分配使用提高内存利用率程序、数据在内存中顺利读写小内存运行大程序 内存管理主要功能&#xff1a; 内存的分配和回收地址重定位地址共享和保护地址扩充 存储器的层次结构 通用&#xff1a;&#xff08;高->低&#xff09;CPU寄…

力扣_字符串9—单词接龙I、II

题目 按字典 w o r d L i s t wordList wordList 完成从单词 b e g i n W o r d beginWord beginWord 到单词 e n d W o r d endWord endWord 转化&#xff0c;一个表示此过程的 转换序列 是形式上像 b e g i n W o r d − > s 1 − > s 2 − > . . . − > s …

家庭动态网络怎么在公网访问主机数据?--DDNS配置(动态域名解析配置)

前言 Dynamic DNS是一个DNS服务。当您的设备IP地址被互联网服务提供商动态变更时,它提供选项来自动变更一个或多个DNS记录的IP地址。 此服务在技术术语上也被称作DDNS或是Dyn DNS 如果您没有一个静态IP,那么每次您重新连接到互联网是IP都会改变。为了避免每次IP变化时手动更…

C# CAD-Xdata数据 添加(一)

运行环境Visual Studio 2022 c# cad2016 一、XData&#xff08;扩展数据&#xff09;特定代码值 XData&#xff08;扩展数据&#xff09;特定代码值 XData通过一系列DXF组码&#xff08;DxfCode&#xff09;存储不同类型的数据&#xff0c;包括但不限于ASCII字符串、已注册应…

VS-Code-HTML-CSS-JS配置

前端三剑客开发环境配置 查看更多学习笔记&#xff1a;GitHub&#xff1a;LoveEmiliaForever HTML开发环境搭建 Auto Close Tag自动闭合HTML标签Auto Rename Tag自动完成两侧标签同步修改HTML SnippetsHTML代码提示补全open in browser右键打开浏览器运行文件Live Server实时…

OpenCV-40 绘制直方图

一、使用matplotlib画直方图 可以利用matplotlib把OpenCV统计得到的直方图绘制出来 示例代码如下&#xff1a; import cv2 import matplotlib.pyplot as pltlena cv2.imread("beautiful women.png") # 变为黑白图片 gray cv2.cvtColor(lena, cv2.COLOR_BGR2GRAY…