IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 工作准备-00 -> 正文阅读

[数据结构与算法]工作准备-00

工作准备–复习

马上需要找工作了,需要进行复习。所以从现在开始逐渐复习,现将每天所得记录下来,以便后来复习以及其他人也可以作为参考。
在牛客上刷题,遇到一道编程题,编程题如下:
题目:
地铁迷在某个城市组织了地铁打卡活动。活动要求前往该城市中的所有地铁站进行打卡。打卡可以在站外或者站内进行。地铁的计价规则如下:只要不出站,就不计费;出站时,只计算进站和出站站点的距离。如在同一个站点进出站,按照最低票价 a 元计算。假设地铁票不会超时。大部分站点都是通过地铁线连通的,而且地铁站的连通是双向的(若 A,B 连通,则 B,A连通),且具有传递性的(若 A,B 连通,且 B,C 连通,则 A,C连通)。但并不是所有的地铁站都相互连通,在不能通过坐地铁达到的两个地点间,交通的花费则提高到 b 元。地铁迷从酒店起点出发,再回到酒店。假设从酒店到达任意地铁站的交通花费为 b 元。请计算地铁迷完成打卡最小交通花费。
案例:
输入如下:n m a b
第一行:8 7 3 6 分别代表:站点数n 站点连接对数m 最低票价a 交通花费b
其中站点对有以下组合:
0—>1
1—>2
2—>3
0—>3
4—>5
5—>6
6—>7

参考代码:

#include <iostream>
using namespace std;
const int N = 1e5 + 50;
int n, m, a, b, u, v;
int parent[N];
//寻找根节点的函数,并作路径压缩
/*如果节点x和他的父节点相同,则x就是根节点,直接返回;
否则,继续寻找x父节点的父节点,直到找到
根节点后返回,并将节点x的父节点改为根节点。*/
int find(int x) {
    return x == parent[x] ? x : parent[x] = find(parent[x]);
}
//合并两个节点,把其中一个节点的父亲换成另一个节点
void to_union(int i, int j) {
	parent[find(i)] = find(j);
}
int main()
{
	cin >> n >> m >> a >> b;
        //初始化:所有节点的父节点都是自己,即自身就是根节点
	for (int i = 0; i<n; i++) {
		parent[i] = i;
	}
        //合并两个节点
	for (int i = 1; i <= m; i++) {
		cin >> u >> v;
		to_union(u, v);
	}
	int cnt = 0;
        //寻找根节点个数
	for (int i = 0; i<n; i++) {
		if (parent[i] == i) {
			cnt++;
		}
	}
        //计算票价
	int ans = b + b + (cnt - 1)*b + cnt*a;
	printf("%d\n", ans);
	return 0;
}

代码思路分析:
首先需要从输入到的数据中获取到需要进行计算的链表:开始是以每个站点为头节点,之后根据站点之间的连接关系生成对应的链表,其中生成链表的主要算法就是find()函数和to_union()函数,这两个函数就是设置parent[头节点值] = 下一节点值。
后面的cnt是用来统计站点组成的链表中孤立链表的个数。
ans是最少花费走完这所有站点。b+b表示从宾馆到第一个站点,再从最后一个站点到宾馆的费用,这个费用是固定不变的。从一个孤立站点到另一个孤立站点需要花费b,所以总共需要(cnt - 1)b;一个孤立站点所组成的链表所要花费的最少钱数等于a,所以总共需要花费cnta;
最后计算出来的结果ans即为走遍这些个站点所需花费最少的费用。

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-07-15 16:28:07  更:2021-07-15 16:28:45 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/8 10:36:36-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码