刷题刷题。

news2024/11/24 0:59:02

租用游艇 

 

1.格式化输入二维数组:1-2,1-3,1-4,2-3,2-4,3-4... ...

                                       for(int i=1; i<=n-1; i++)
                                             for(int j=i+1; j<=n; j++)

2.三重for循环枚举路径:第一层for枚举1-k中转站,第二,三层为 i站点--j站点直达所需距离

3.输出1-n(a[1][n])的最短路径:有序!1-n ≠ n-1

#include<stdio.h>
#include<string.h>
int main()
{
	int n,a[210][210];
	scanf("%d",&n);
	memset(a,1,sizeof(a));                //数组初值赋大数
	for(int i=1; i<=n-1; i++)                  //注意输入格式 
	{
		for(int j=i+1; j<=n; j++) 
		{
			scanf("%d",&a[i][j]);
		}
	}
	for(int k=1; k<=n; k++)               //枚举1-k中转站
	{
		for(int i=1; i<=n; i++)
		{
			for(int j=1; j<=n; j++)
			{
				if(a[i][j]>a[i][k]+a[k][j])
				{
					a[i][j]=a[i][k]+a[k][j];
				}
			}
		}
	}
	printf("%d",a[1][n]);               //1-n的最短路径
}

  修路

 

 

 

1.变量设置:结构体存储:点1+点2+1到2的距离

2.初始化&&找find father:并查集基本操作

3.升序排序距离:调用库函数,快排不行

4.unionn时加入权值(距离):

5.终止条件:sum==n-1,线全部用完

6.注意:条件已知已连接点点,两点距离设为0即可

#include<bits/stdc++.h>
using namespace std;
int fa[500501];
long double ans=0.0;
int sum=0;
int k=0;
 
struct node
{
	int x,y;
	double z;
} a[500501];
 
void init(int n)
{
	for(int i=1; i<=n; i++)
	{
		fa[i]=i;
	}
}
 
int find(int i)
{
	if(fa[i]==i) return i;
	else
	{
		return find(fa[i]);
	}
}
 

bool cmp(node a,node b)
{
    return a.z<b.z;
}
 
 
void add(int i,int j,double l)        //构造结构体存储两点间距离(点+点+距离) 
{
	a[++k].x=i;
	a[k].y=j;
	a[k].z=l;
}
 
int main()
{
	int i,j,m,n,b,c;
	int xx[500501],yy[500501];
	scanf("%d %d",&n,&m);
	init(n);
	
	for(i=1; i<=n; i++)
	{
		scanf("%d %d",&xx[i],&yy[i]);
	}
 
	for(i=1; i<=n; i++)
		for(j=i+1; j<=n; j++)
		{
			long double z=(double)sqrt((double)(xx[i]-xx[j])*(xx[i]-xx[j])+(double)(yy[i]-yy[j])*(yy[i]-yy[j]));
			add(i,j,z);
		}
 
	for(i=1; i<=m; i++)
	{
		scanf("%d %d",&b,&c);
		add(b,c,0.0);
	}
 
	//quick(1,k);
	  sort(a+1,a+1+k,cmp); 
 
	for(i=1; i<=k; i++)
	{
		int x=find(a[i].x);
		int y=find(a[i].y);
		if(x!=y)
		{
			fa[x]=y;
			sum++;                    //线使用量+1 
			ans+=a[i].z;             //权值求和 
		}
		
		if(sum==n-1) break;         //n为点个数,n-1为线个数 
	}
 printf("%.2Lf",ans);
    return 0; 
}

最小生成树 

 

1.利用快排对边长短排序:从最小边开始连接
2.连接点点(集合):unionn并查集,fa相同continue,不同则合并,同时加上权值

3.查找是否连通:即为察father是否唯一

4.注意:并查集标准操作,初始化+找find father+合并

#include<stdio.h>
int n,m;
int fa[210000];
long long ans=0;
int cnt=0;
 
struct node
{
    int x,y,z;
} a[210000];
 
void quick(int left,int right)
{
    int i,j;         //双指针i,j
    struct node t,temp; //最左边为基准数,每次递归过程数会变化
    temp=a[left];                        //结构体t,temp(需整体交换,排序过程)
    i=left;                       //同理,变化数利用变量代用
    j=right;
 
    if(left>right) return ;
 
    while(i!=j)
    {
        while(a[j].z>=temp.z&&i<j)
            j--;
        while(a[i].z<=temp.z&&i<j)
            i++;
        if(i<j)            //i,j没有相遇时
        {
            t=a[i];        //整体交换
            a[i]=a[j];
            a[j]=t;
        }
    }
    a[left]=a[i];        //将i,j相遇的值给队首
    a[i]=temp;           //此时基准数位于相遇点
 
    quick(left,i-1);
    quick(j+1,right);
}
 
void init(int n)              //fa[]初始化
{
    for(int i=1; i<=n; i++)
    {
        fa[i]=i;
    }
}
 
int find(int i)             //查询,找爸爸
{
    if(i==fa[i]) return i;
    else
    {
        fa[i]=find(fa[i]);
        return fa[i];
    }
}
 
int main()
{
    scanf("%d %d",&n,&m);
 
    for(int i=1; i<=m; i++)
    {
        scanf("%d %d %d",&a[i].x,&a[i].y,&a[i].z);
    }
 
    init(m);              //初始化fa[]
 
    quick(1,m);//升序排序,找最小边
 
    for(int i=1; i<=m; i++)     //集合
    {
        int x=find(a[i].x);
        int y=find(a[i].y);
        if(x==y) continue;
        else
        {
            fa[x]=y;
            ans+=a[i].z;
        }
    }
 
    for(int i=1; i<=n; i++)
    {
        if(fa[i]==i)
        {
            cnt++;            //找cnt个集合
        }
    }
 
    if(cnt>1) printf("orz\n");    //只能有一个集合
    else printf("%lld\n",ans);
    return 0;
 
}

 

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

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

相关文章

D. Unique Palindromes(回文串/构造)

题目 题意 给定字符串的长度&#xff0c;以及k个条件。 对于每个条件&#xff0c;给定x和c&#xff0c;表示原字符串的长度为x的前缀字符串&#xff0c;存在c个互不相同的回文子串。 原字符串由26个小写字母组成。 构造出长度为n&#xff0c;且满足上述k个条件的字符串。如果…

不黑艺术学社京藏行——参观五台山孙溟㠭为五台山红英师治印

不黑学社社长孙溟㠭先生与五台山菩萨顶主事红英师 不黑学社京藏行&#xff0c;路经五台把佛拜。 巍巍五台清凉境&#xff0c;参访伊始菩萨顶。 感恩“天珠”刘诗语&#xff0c;芬芳佛语满香华。 感恩慈悲红英师&#xff0c;带众参拜大白塔。 菩萨顶上如意宝&#xff0c;莲…

springboot+vue口腔管理平台(源码+文档)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的口腔管理平台。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 &#x1f495;&#x1f495;作者&#xff1a;风歌&a…

微服务---分布式多级缓存集群实现方案(Caffeine+redis+nginx本地缓存+Canal数据同步)

分布式多级缓存集群实现方案 1.什么是多级缓存 传统的缓存策略一般是请求到达Tomcat后&#xff0c;先查询Redis&#xff0c;如果未命中则查询数据库&#xff0c;如图&#xff1a; 存在下面的问题&#xff1a; •请求要经过Tomcat处理&#xff0c;Tomcat的性能成为整个系统的…

DJ5-1/2 输入输出系统(第一节课)

目录 5.1 I/O 系统的功能、模型和接口 5.1.1 I/O 系统的基本功能 5.1.2 I/O 系统的层次结构和模型 5.1.3 I/O 系统接口 5.2 I/O 设备和设备控制器 5.2.1 I/O 设备 5.2.2 设备控制器 5.2.3 I/O 通道 5.2.4 总线系统 5.1 I/O 系统的功能、模型和接口 5.1.1 …

Python进阶篇(五)-- 邮件客户端实现与电子邮件发送

1 SMTP 通过完成本实验&#xff0c;我们将更加了解SMTP协议。还将学到使用Python实现标准协议的经验。 主要任务是开发一个简单的邮件客户端&#xff0c;将邮件发送给任意收件人。客户端将需要连接到邮件服务器&#xff0c;使用SMTP协议与邮件服务器进行对话&#xff0c;并向邮…

【P5】JMeter HTTP Cookie管理器

文章目录 一、测试网站二、Cookie 设置规则2.1、无配置元件时&#xff0c;Cookie 不会自动设置&#xff08;与线程组设置无关&#xff09;2.2、有配置元件&#xff0c;不选任何参数时&#xff0c;Cookie 自动设置&#xff08;与线程组设置无关&#xff09;2.3、有配置元件&…

【iOS KVO(上)实现过程】

前言 KVO 也适用于传值&#xff0c;在之前的学习只是学习了KVO的传值&#xff0c;今天详细学习 监听和实现 源码放在下一节学习 1.1 KVO KVO&#xff08;Key-Value Observing&#xff09;是Objective-C语言中一种观察者模式的实现&#xff0c;可以用来监听对象属性值的变化…

Kafka基础概念介绍

背景 Kafka是我们项目用的最多的消息中间件&#xff0c;但里面也有很多存在的问题&#xff0c;如重复消费、带宽瓶颈、部分分区消费不下来的异常场景。 重复消费问题有些让人头疼&#xff08;reblance导致offset提交失败&#xff09;&#xff0c;这里会持续更新&#xff08;基…

UML简介与类图详解

1 UML简介 1.1 UML是什么 UML&#xff0c;全称为Unified Model Language&#xff0c;即统一建模语言&#xff0c;是由一整套图表组成的&#xff0c;为面向对象系统的产品进行说明、可视化和编制文档的一种标准语言。UML 代表了一组最佳工程实践&#xff0c;这些实践已被证明在…

【路径规划】基于哈里斯鹰优化算法的栅格法路径规划 机器人路径规划【Matlab代码#20】

文章目录 1. 原始HHO算法2. 机器人路径规划环境创建3. 路径规划模型建立4. 部分代码展示5. 仿真结果展示6. 资源获取方式 1. 原始HHO算法 详细介绍此处略&#xff0c;可参考HHO算法介绍 2. 机器人路径规划环境创建 对机器人工作空间的进行环境建模是机器人路径规划研究的重要…

【电源专题】案例:拆一个早期用的万能充看看内部状况

说到万能充,可能存在80/90后的记忆里。以前手机都可以更换电池的,所有往往都是买两块,一块在手机内部使用,另一块在万能充充电。 万能充的外观也是大同小异的,从网上找了一些图片: 这东西现在日常生活已经都看不到了,关键因素之一应该是现在的手机电池都是不可拆…

多维图像去噪方法研究

一、背景介绍 由于传感器技术的快速发展&#xff0c;高光谱&#xff08;HS&#xff09;遥感&#xff08;RS&#xff09;成像为飞机等数据采集设备远距离观测和分析地球表面提供了大量的空间和光谱信息&#xff0c;航天器和卫星。 HS RS 技术的最新进展甚至革命为实现各种应用的…

【ONE·C++ || set和map(一)】

总言 主要介绍set和map的基本框架和使用 文章目录 总言1、部分接口介绍和使用举例1.1、序列式容器和关联式容器、键值对1.1.2、pair键值对 1.2、set基本介绍1.2.1、set::set、遍历1.2.2、set::insert、set::erase、set::find1.2.3、set::count、set::lower_bound、set::upper_…

数据结构与算法基础(青岛大学-王卓)(1)

士别三日当刮目相待&#xff0c;不好意思鸽了好久了&#xff0c;因为学习的时间不连续&#xff0c;所以我一直攒着&#xff0c;我又回来继续更新了 没有继续学习浙大的数据结构了&#xff0c;对比了青岛大学的王老师的这个教程我觉得更适合我一些&#xff0c;更入门&#xff0…

【Spring篇】Spring整合

&#x1f353;系列专栏:Spring系列专栏 &#x1f349;个人主页:个人主页 目录 一、Spring整合 1.Spring整合Mybatis思路分析 1.环境准备 2.整合思路分析 2.Spring整合Mybatis 3.Spring整合Junit 1.环境准备 2.整合Junit步骤 二、图书推荐 1.《元宇宙Ⅱ&#xff1a;图…

Ubuntu安装MySQL

一.安装MySQL服务器 安装MySQL服务器&#xff1a; apt-get install mysql-server 对MySQL进行初始化&#xff0c;设置密码&#xff1a; mysql_secure_installation 注意&#xff0c;这里要设置密码的最低长度为8位&#xff0c;如果你设的密码小于8位&#xff0c;则会提示&am…

有趣工具合集小程序-做你的小树洞小程序

有趣工具合集小程序-做你的小树洞 今天闲来无事&#xff0c;发现了一个有趣的小程序-做你的小树洞&#xff0c;包含ChatGpt小机器人、抛硬币、手持弹幕、亲戚计算器、藏头诗、唐诗三百首、歇后语以及猜谜语等功能 小程序总体界面是这样的 1.藏头诗 这个小程序里边有很多有趣…

Redis的哨兵和集群模式

哨兵模式# 哨兵模式是redis高可用的实现方式之一 使用一个或者多个哨兵(Sentinel)实例组成的系统&#xff0c;对redis节点进行监控&#xff0c;在主节点出现故障的情况下&#xff0c;能将从节点中的一个升级为主节点&#xff0c;进行故障转义&#xff0c;保证系统的可用性。 哨…

【Qt5】多线程串口

文章目录 原版代码工程增加QCustomplot实时画图的源码工程源码 原版代码工程 源码下载链接&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/15pWzadPwOx_OfJGtvL-MjA 提取码&#xff1a;lief –来自百度网盘超级会员V5的分享 增加QCustomplot实时画图的源码工程 源码&…