GXUOJ-算法-第三次作业

news2025/1/4 7:35:17

1.基础练习 Huffman树

问题描述

GXUOJ | 基础练习 Huffman树

代码解析

#include<bits/stdc++.h>
using namespace std;
int main(){
	int n;
	cin>>n;
	
	priority_queue<int,vector <int>,greater<int> >pq;
	
	for(int i=0;i<n;i++){
		int value;
		cin>>value;
		pq.push(value);
	}
	
	int sum=0;
	while(pq.size()>1){
		int first=pq.top();pq.pop();
		int second=pq.top();pq.pop();
		int temp=first+second;
		sum+=temp;
		pq.push(temp);
	}
	cout<<sum;
}

2.数据结构-最小生成树

问题描述

GXUOJ | 数据结构-最小生成树

代码解析

#include<bits/stdc++.h>
using namespace std;
const int INF=0x3f3f3f3f;
const int maxn=505;

//a[i][j] 表示节点 i 和节点 j 之间的边权重
int a[maxn][maxn];
int visit[maxn];
//dist[maxn] 存储从起始节点到其他节点的当前最短距离
int dist[maxn];

int n,m;
int u,v,w;
long long sum=0;

// prim算法核心函数,pos为起始节点
int prim(int pos){
	// 将起始节点到自身的距离设为0
	dist[pos]=0;
	
	for(int i=1;i<=n;i++){
		int cur=-1;
		for(int j=1;j<=n;j++){
			// 如果节点j未被访问,且(cur为-1 或者 
			//节点j到起始点的距离小于cur到起始点的距离)
			if(!visit[j]&&(cur==-1||dist[j]<dist[cur])){
				cur=j;
			}
		}
		if(dist[cur]>=INF)	return INF;
		sum+=dist[cur];
		visit[cur]=1;
		for(int k=1;k<=n;k++){
			if(!visit[k])
				dist[k]=min(dist[k],a[cur][k]);
				/*
				 假设起始节点为 s,最初 dist[k] 记录的是从 s 到 k 的某条路径的长度。
				 当我们将节点 cur 加入到最小生成树中后,发现从 s 经过 cur 到 k 的路径更短,
				 那么就更新 dist[k] 为从 s 经过 cur 到 k 的这个更短的距离。
				 这样,dist[k] 始终保持从起始节点到 k 的当前最短距离。
				*/
		}
	}
	return sum;
}
int main(){
	cin>>n>>m;
	memset(a,0x3f,sizeof(a));
	memset(dist,0x3f,sizeof(dist));
	
	for(int i=1;i<=m;i++){
		cin>>u>>v>>w;
        // 无向图,所以两个方向的边权都要更新
		a[u][v]=a[v][u]=w;
	}
	int value=prim(1);
	
	if(value>=INF) cout<<"Imp"<<endl;
	else cout<<sum<<endl;
	return 0;
}

3.最短路径

问题描述

GXUOJ | 最短路径

代码解析

#include<bits/stdc++.h>
using namespace std;
long long n, m, s, dis[2000005], vis[2000005];
// 定义节点结构体,包含两个整数x和y
struct node
{
	int x, y;
};
// 定义一个vector数组g,用于存储每个节点的邻接节点
vector<node>g[2000005];
// 定义一个dijkstra函数,用于计算从节点z到其他节点的最短路径
void dijkstra(int z)
{
	// 定义一个优先队列q,用于存储节点和对应的距离
	priority_queue<pair<int, int>>q;
	// 将dis数组初始化为无穷大
	memset(dis, 0x3f, sizeof(dis));
	// 将vis数组初始化为0
	memset(vis, 0, sizeof(vis));
	// 将起点z的距离设置为0
	dis[z] = 0;
	// 将起点z和距离0放入优先队列q中
	q.push({ 0, z });
	// 当优先队列q不为空时,执行循环
	while (!q.empty())
	{
		// 取出优先队列q中的节点x和距离
		int x = q.top().second;
		q.pop();
		// 如果节点x已经访问过,则跳过
		if (vis[x]) continue;
		// 将节点x标记为已访问
		vis[x] = 1;
		// 遍历节点x的邻接节点
		for (auto to : g[x])
		{
			// 取出邻接节点k和距离l
			int k = to.x;
			int l = to.y;
			// 如果从节点z到节点k的距离大于从节点z到节点x的距离加上距离l,则更新距离
			if (dis[k] > dis[x] + l)
			{
				dis[k] = dis[x] + l;
				// 如果节点k未被访问过,则将节点k和距离放入优先队列q中
				if (vis[k] == 0)
				{
					q.push({ -dis[k], k });
				}
			}
		}
	}
}
int main()
{
	// 输入节点数n、边数m和起点s
	cin >> n >> m;
	int start, end;
	cin >> start >> end;
	// 遍历每条边,输入边的两个端点和距离,并将距离存入邻接节点数组g中
	for (int i = 1; i <= m; i++)
	{
		int u, v, w;
		cin >> u >> v >> w;
		g[u].push_back({ v, w });
	}
	// 调用dijkstra函数,计算从起点s到其他节点的最短路径
	dijkstra(0);
	
	cout << dis[end] - dis[start];
	
	return 0;
}

4.小西加油

问题描述

GXUOJ | 小西加油

代码解析

#include <bits/stdc++.h>
#define MAX 10000 + 1
const int MAXN=10001;
using namespace std;

int n;			//站点数量 
double d;		//每升油可以前进的距离 
int v[MAXN];	//站点的距离 
int a[MAXN];	//编号为i的站点一升油的价格为 ai元 
 
int ans;


int main()
{
    cin >> n >> d;
    for (int i = 1; i <= n - 1; i++)
        cin >> v[i];
    for (int i = 1; i <= n; i++)
        cin >> a[i];

    double last = 0;	//用于记录上一段行程结束后剩余的油量可行驶的距离比例
    int price = a[1];
    for (int i = 1; i <= n - 1; i++)
    {
        double dis = v[i] - d * last; // 计算当前段距离
        int units = ceil(dis / d); // 计算当前段所需完整单位数量
        last = units - dis / d; // 更新剩余距离比例
        ans += price * units; // 累加当前段花费

        if (a[i + 1] < price) // 若下一个位置价格更低
            price = a[i + 1]; // 更新价格
    }

    cout << ans << endl;
    return 0;
}

5.并查集应用:判圈

问题描述

GXUOJ | 并查集应用:判圈

代码解析

#include<bits/stdc++.h> 
using namespace std;

const int MAXN=1000;
int f[MAXN];
//并查集三要素,初始化,寻找父节点,合并并查集

void init(int n) {
	for (int i = 0; i < n; i++) {
		f[i] = i;//刚开始每个的父节点都是自己
	}
}

int find(int x) {
	return x == f[x] ? x : (f[x]=find(f[x]));
}

void merage(int x, int y) {
	int fx = find(x);
	int fy = find(y);
	if (fx == fy) return;	//在同一个组织力,不用合并
	else
		f[fx] = y;
}

int main()
{
	int n, m,q;
	cin >> n >> m >> q;
	init(n);
	for (int i = 0; i < m; i++) {
		int u, v;
		cin >> u >> v;
		merage(u, v);

	}

	for (int i = 0; i < q; i++) {
		int u, v;
		cin >> u >> v;
		int fu = find(u);
		int fv = find(v);
		if (fu != fv)
			cout << "NO"<<endl;
		else
			cout << "YES"<<endl;
	}
}

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

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

相关文章

04-微服务02

我们将黑马商城拆分为5个微服务&#xff1a; 用户服务 商品服务 购物车服务 交易服务 支付服务 由于每个微服务都有不同的地址或端口&#xff0c;相信大家在与前端联调的时候发现了一些问题&#xff1a; 请求不同数据时要访问不同的入口&#xff0c;需要维护多个入口地址…

vue导入导出excel、设置单元格文字颜色、背景色、合并单元格(使用xlsx-js-style库)

npm i xlsx-js-style <template><button click"download">下载 Excel 表格</button><el-table :data"tableData" style"width: 100%"><el-table-column prop"date" label"日期" width"180…

AI文献阅读ChatDOC 、ChatPDF 哪个好?

作为AI产品的深度使用者&#xff0c;基本每天都在使用AI。AI诞生后仿佛给所有的产品打开了新世界大门。当然AI在文献阅读方面自然也不会缺席。 先来简单对比一下ChatDOC vs ChatPDF 从表格里可以看到ChatDOC与ChatPDF都是基于GPT的产品&#xff0c;但在功能上ChatDOC还是比Chat…

小程序基础 —— 10 如何调试小程序代码

如何调试小程序代码 在进行项目开发的时候&#xff0c;不可避免需要进行调试&#xff0c;那么如何调试小程序呢&#xff1f; 打开微信开发者工具后&#xff0c;有一个模拟器&#xff0c;通过模拟器能够实时预览自己写的页面&#xff0c;如下&#xff1a; 在上部工具栏中有一个…

vue+echarts实现疫情折线图

效果&#xff1a; 代码&#xff1a; <<template><div><div id"left1" style "height:800px;width:100%"></div></div> </template><script> //疫情数据//export default {data() {return {data:{//疫情数据…

使用arduino从零做一辆ROS2Jazzy的阿克曼小车---电机驱动篇

本项目采用 Arduino Mega2560 Pro 作为主控开发板&#xff0c;电机驱动器选用 TB6612FNG&#xff0c;并配备了 12V 电源、两个直流减速电机和一个舵机。未来计划通过嘉立创将各模块集成到一个 PCB 板上&#xff0c;提升系统的集成度和稳定性。 本文将聚焦于电机驱动部分&#x…

基于源码剖析:深度解读JVM底层运行机制

每日禅语 佛说&#xff0c;给你修路的&#xff0c;是你自己&#xff1b;埋葬你的&#xff0c;也是你自己&#xff1b;帮助你的&#xff0c;是你自己&#xff1b;毁灭你的&#xff0c;也是你自己&#xff1b;成就你的&#xff0c;自然还是你自己。所以佛说&#xff1a;自作自受&…

算法进阶:贪心算法

贪心算法是一种简单而直观的算法思想&#xff0c;它在每一步选择中都采取在当前状态下最优的选择&#xff0c;以期望最终得到全局最优解。贪心算法通常适用于一些具有最优子结构的问题&#xff0c;即问题的最优解可以通过一系列局部最优解的选择得到。 贪心算法的基本思路是&a…

Hive刷分区MSCK

一、MSCK刷分区 我们平时通常是通过alter table add partition方式增加Hive的分区的&#xff0c;但有时候会通过HDFS put/cp命令或flink、flum程序往表目录下拷贝分区目录&#xff0c;如果目录多&#xff0c;需要执行多条alter语句&#xff0c;非常麻烦。Hive提供了一个"…

Windows API Set:那些“只存在但不被使用“的DLL

API Set 是什么&#xff1f; 想象一下&#xff0c;Windows就像一个大型图书馆&#xff0c;而API Set就是这个图书馆的索引系统。但这个索引系统非常特别&#xff1a;它是直接内置在Windows加载器中的"虚拟目录"。 // 一个典型的API Set映射示例 api-ms-win-core-mem…

【Java 数据结构】合并两个有序链表

&#x1f525;博客主页&#x1f525;&#xff1a;【 坊钰_CSDN博客 】 欢迎各位点赞&#x1f44d;评论✍收藏⭐ 目录 1. 题目 2. 解析 3. 代码实现 4. 小结 1. 题目 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示…

图像处理-Ch6-彩色图像处理

Ch6 彩色图像处理 无广告更易阅读&#xff0c;个人博客点此进入<– 文章目录 Ch6 彩色图像处理彩色基础彩色模型(Color models)RGB(red, green, blue)CMY & CMYK(cyan, magenta, yellow/and black)HSI(hue, saturation, intensity)HSV(hue, saturation, value) 颜色空…

03.HTTPS的实现原理-HTTPS的工作流程

03.HTTPS的实现原理-HTTPS的工作流程 简介1. HTTPS的工作流程1.1. TCP的工作流程1.1.1. 三次握手的详细步骤1.1.2. 三次握手的作用 1.2. HTTPS的工作流程1.2.1. HTTPS与TCP的关系1.2.2. HTTPS的工作流程 2. 公钥和私钥的作用3. 对称密钥的生成和交换4. 对称加密和非对称加密的区…

隧道FM广播信号、隧道内调频广播信号覆盖方案选择

一、为什么汽车驶入隧道内&#xff0c;就听不到FM调频广播信号了 隧道是一个半封闭的管状结构&#xff0c;有很强的电磁屏蔽效应&#xff0c;汽车进入隧道后&#xff0c;汽车收音机就会出现沙沙的噪声&#xff0c;这是由于隧道内的调频广播信号变弱甚至无信号&#xff0c;导致车…

基于SSM的“电器网上订购系统”的设计与实现(源码+数据库+文档+PPT)

基于SSM的“电器网上订购系统”的设计与实现&#xff08;源码数据库文档PPT) 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SSM 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 系统首页 商品类型 商品管理 订单展示 商品购物车 登录页面 …

工业大数据分析算法实战-day19

day19 今天是第19天&#xff0c;昨日是针对线性规划、整数规划建模技巧进行阐述&#xff0c;今天开启第九章节—行业知识沉淀的方法&#xff0c;该章节主要是对行业知识的范畴进行探讨&#xff0c;将讨论限制在研判类的知识沉淀上&#xff0c;将业务范围侧重在PHM中&#xff0…

Unity URP多光源支持,多光源阴影投射,多光源阴影接收(优化版)

目录 前言&#xff1a; 一、属性 二、SubShader 三、ForwardLitPass 定义Tags 声明变体 声明变量 定义结构体 顶点Shader 片元Shader 四、全代码 四、添加官方的LitShader代码 五、全代码 六、效果图 七、结语 前言&#xff1a; 哈喽啊&#xff0c;我又来啦。这…

8086汇编(16位汇编)学习笔记09.宏汇编

8086汇编(16位汇编)学习笔记09.宏汇编-C/C基础-断点社区-专业的老牌游戏安全技术交流社区 - BpSend.net 宏汇编在文件中是当做关键字的,但是在bug中运行时并没有这些指令,这些关键词被称为伪指令,cpu并不认识他们,需要经过编译器转化成 cpu认识的代码,但是他多我们写代码帮助又…

leetcode 面试经典 150 题:矩阵置零

链接矩阵置零题序号73题型二维数组解题方法标记数组法难度中等熟练度✅✅✅✅ 题目 给定一个 m x n 的矩阵&#xff0c;如果一个元素为 0 &#xff0c;则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。 示例 1&#xff1a; 输入&#xff1a;matrix [[1,1,1],[1,0,1]…

五、CentOS7/CentOS8安装APISIX(1)

目录 &#x1f33b;&#x1f33b; 一、 Apache APISIX介绍1.1 什么是Apache APISIX1.2 APISIX架构1.3 Apache APISIX 的技术优势1.4 APISIX‌应用场景 二、APISIX快速开始2.1 centos7/centos8安装APISIX 一、 Apache APISIX介绍 1.1 什么是Apache APISIX Apache APISIX 是一个…