算法刷题day46

news2024/11/17 23:47:21

目录

  • 引言
  • 一、树的重心
  • 二、毕业旅行问题
  • 三、高精度乘法

引言

今天复习了一下高精度的所有模板,包括加法、减法、乘法、除法,因为自己当时在蓝桥杯的时候没有看出来那个题使用高精度,因为对于一个数的大小和一个数的长度,自己有时候搞不清楚概念,所以当时没看出来,一个数就算是 l o n g   l o n g long\ long long long 也只有 18 、 19 18、19 1819 那么长,所以得记住这个概念。然后就是树形 D P DP DP 和状压 D P DP DP 了,做了已经很多遍了,已经慢慢的理解了其深层含义,所以还是要先多做题然后才能明白其内涵,以后打算把基础课的题全部刷一遍,好好巩固基础,加油!


一、树的重心

标签:dfs、树形DP

思路:思路就是求每一个结点去除后的最大值,然后在这些最大值里取最小值,如下图所示。这里的 d f s ( u ) dfs(u) dfs(u) 求得是 u u u 结点的向下的结点个数,我们可以先找到其每个分支的数量,因为删去该结点后,每个分支就是一个连通块,然后向上的一块,也是一个连通块,所以思路就是先对每一个向下的分支的连通块找最小值,然后同时求和,然后用总的结点数一减就是向上的连通块中的结点数,然后再对其求最小值,又因为这是一个递归过程,整个过程是从下往上解决的。然后为什么要建双向边,是因为不知道谁是谁的父节点,也不知道谁是根结点,同时判重,这样就可以只按照一个方向去递归了。

在这里插入图片描述

题目描述:

给定一颗树,树中包含 n 个结点(编号 1∼n)和 n−1 条无向边。

请你找到树的重心,并输出将重心删除后,剩余各个连通块中点数的最大值。

重心定义:重心是指树中的一个结点,如果将这个点删除后,剩余各个连通块中点数的最大值最小,那么这个节点被称为树的重心。

输入格式
第一行包含整数 n,表示树的结点数。

接下来 n−1 行,每行包含两个整数 a 和 b,表示点 a 和点 b 之间存在一条边。

输出格式
输出一个整数 m,表示将重心删除后,剩余各个连通块中点数的最大值。

数据范围
1≤n≤105
输入样例
9
1 2
1 7
1 4
2 8
2 5
4 3
3 9
4 6
输出样例:
4

示例代码:

#include <bits/stdc++.h>

using namespace std;

typedef long long LL;
typedef pair<int,int> PII;
#define x first
#define y second

const int N = 1e5+10, M = N * 2, INF = 0x3f3f3f3f;

int n, m;
int h[N], e[M], ne[M], idx;
bool st[N];
int ans = 2e9;

void add(int a, int b)
{
	e[idx] = b, ne[idx] = h[a], h[a] = idx++;
}

int dfs(int u)  // 找到包括u在内的分支数的和
{
	st[u] = true;  // 防止往回递归
	
	int sum = 1, size = 0;
	for(int i = h[u]; i != -1; i = ne[i])
	{
		int j = e[i];
		if(st[j]) continue;
		
		int t = dfs(j);
		sum += t;
		size = max(size, t);
	}
	
	size = max(size, n - sum);
	ans = min(ans, size);
	return sum;
}

int main()
{
	ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
	
	memset(h, -1, sizeof h);
	cin >> n;
	for(int i = 0; i < n - 1; ++i)
	{
		int a, b; cin >> a >> b;
		add(a,b), add(b,a);  // 因为不知道谁是谁的父节点,也不知道谁是根
	}
	
	dfs(1);
	cout << ans << endl;
	
	return 0;
}

二、毕业旅行问题

标签:状态压缩DP

思路:就是定义一个状态 f [ i ] [ j ] f[i][j] f[i][j] 代表从已经走过 i i i 个城市,走过的城市编号为其二进制的 1 1 1 的位数,我们从 0 0 0 开始,最终到达 j j j 号城市的一个集合,那么状态转移方程为先经过 k k k 号城市,然后再到达 j j j 号城市,直接按顺序枚举即可。然后初始状态就是只经过 0 0 0 号城市,并且最终在该城市,花费为 0 0 0 ,即 f [ 1 ] [ 0 ] = 0 f[1][0] = 0 f[1][0]=0 ,然后只需要判断是否经过 j , k j,k j,k 等城市即可。

题目描述:

小明目前在做一份毕业旅行的规划。

打算从北京出发,分别去若干个城市,然后再回到北京,每个城市之间均乘坐高铁,且每个城市只去一次。

由于经费有限,小明希望能够通过合理的路线安排尽可能的省些路上的花销。

给定一组城市和每对城市之间的火车票的价钱,找到每个城市只访问一次并返回起点的最小车费花销。

注意:北京为 1 号城市。

输入格式
第一行包含一个正整数 n,表示城市个数。

接下来输入一个 n 行 n 列的矩阵,表示城市间的车票价钱。

输出格式
输出一个整数,表示最小车费花销。

数据范围
1<n≤20,包括北京车票价格均不超过 1000 元。

输入样例:
4
0 2 6 5
2 0 4 4
6 4 0 2
5 4 2 0
输出样例:
13
说明
共 4 个城市,城市 1 和城市 1 的车费为 0,城市 1 和城市 2 之间的车费为 2,城市 1 和城市 3 之间的车费为 6,城市 1
 和城市 4 之
 间的车费为 5,以此类推。

假设任意两个城市之间均有单程票可买,且价格均在 1000 元以内,无需考虑极端情况。

示例代码:

#include <bits/stdc++.h>

using namespace std;

typedef long long LL;
typedef pair<int,int> PII;
#define x first
#define y second

const int N = 20, M = 1 << N;

int n, m;
int w[N][N];
int f[M][N];

int main()
{
	ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
	
	cin >> n;
	for(int i = 0; i < n; ++i)
	{
		for(int j = 0; j < n; ++j)
		{
			cin >> w[i][j];
		}
	}
	
	memset(f, 0x3f, sizeof f);
	f[1][0] = 0;
	for(int i = 1; i < M; i += 2)
	{
		for(int j = 0; j < n; ++j)
		{
			if(i >> j & 1)
			{
				for(int k = 0; k < n; ++k)
				{
					if(i >> k & 1)
					{
						f[i][j] = min(f[i][j], f[i-(1<<j)][k] + w[k][j]);
					}
				}
			}
		}
	}
	
	int res = 2e9;
	for(int i = 0; i < n; ++i)
	{
		res = min(res, f[(1<<n)-1][i] + w[i][0]);
	}
	cout << res << endl;
	
	return 0;
}

三、高精度乘法

标签:高精度、模板题

思路:模板题没什么说的,值得注意的是,这个加法和乘法都涉及到进位,所以这个 A A A 遍历完了,有时最后刚好进位了,所以也要等 t t t 0 0 0 了才行,得判断一下。

题目描述:

给定两个非负整数(不含前导 0) A 和 B,请你计算 A×B 的值。

输入格式
共两行,第一行包含整数 A,第二行包含整数 B。

输出格式
共一行,包含 A×B 的值。

数据范围
1≤A的长度≤100000,0≤B≤10000
输入样例:
2
3
输出样例:
6

示例代码:

#include <bits/stdc++.h>

using namespace std;

typedef long long LL;
typedef pair<int,int> PII;
#define x first
#define y second

const int N = 1e5+10;

int n, m;

vector<int> mul(vector<int>& a, int b)
{
	vector<int> res;
	
	int t = 0;
	for(int i = 0; i < a.size() || t; ++i)
	{
		if(i < a.size()) t += b * a[i];
		res.push_back(t % 10);
		t /= 10;
	}
	
	while(res.size() > 1 && res.back() == 0) res.pop_back();
	return res;
}

int main()
{
	ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
	
	string a; int b;
	cin >> a >> b;
	
	vector<int> A;
	for(int i = a.size() - 1; i >= 0; --i) A.push_back(a[i] - '0');
	
	auto res = mul(A,b);
	for(int i = res.size() - 1; i >= 0; --i) cout << res[i];
	cout << endl;
	
	return 0;
}

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

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

相关文章

【FX110网】股市、汇市一年有多少个交易日?

事实上&#xff0c;作为交易者&#xff0c;重要的是要了解并非每天都是交易日。虽然金融市场在大多数工作日开放交易&#xff0c;但在某些特定情况下无法进行交易。这些非交易日可能因各种原因而发生&#xff0c;包括节假日、周末和市场休市。 通过随时了解假期、交易时间表和市…

报名 | Qt汽车及工业行业解决方案及实战训练 深圳站(5月15日 星期三)

加入我们的Qt技术培训&#xff0c;探索跨平台应用开发的无限可能&#xff01;本次培训将深入Qt框架&#xff0c;涵盖从基础概念到高级功能的全方位知识&#xff0c;无论您是刚入门的新手还是希望提升技能的资深开发者&#xff0c;都能在此找到适合自己的学习路径。通过实践案例…

《XR806开发板试用》硬件IIC驱动MPU6050

1.环境配置 总结一下遇到的问题&#xff1a; 1.需要修改配置文件中的文件路径 2.固件编译出现以下问题时&#xff0c;需要修改文件内容 2.工程目录结构 device/xradio/xr806/ohosdemo/car_demo └── src #源文件 └── main.c #主函数 └── mpu6050.c #驱动代码 └…

golang 流程控制

流程控制 一 if条件语句 1 if单分支 if条件表达式{ //条件表达式不建议写括号 if后一定要有空格与条件表达式分开 逻辑代码 /大括号一定要写不能省略 } 例如 var age int fmt.Println("请输入学生1年龄:") fmt.Scanln(&age) fmt.Println(&quo…

光伏并网逆变器IEEE 1547测试

光伏并网逆变器IEEE 1547测试 IEEE 1547A-2014 有电力系统的互连配电资源;修改件1 IEEE 1547.2-2008 IEEE 1547《分布式资源与电力系统互连用IEEE标准》应用指南 IEEE 1547-2003 有电力系统的互连配电资源 IEEE P1547/D08-2001 IEEE 1547-2018(Revision of IEEE Std 1547-…

凌恩病原微生物检测系统上线啦,助力环境病原微生物检测

病原微生物是指能够引起人类或动物疾病的微生物&#xff0c;包括病毒、细菌、真菌、衣原体和支原体等。病原微生物可以通过空气、体液等介质传播&#xff0c;危害人体健康&#xff0c;造成财产损失。因此&#xff0c;快速、准确地检测病原微生物对于疫情防控和保障人民生命健康…

C++之类与对象(1)

目录 一、面向对象的思想 二、类 2.1 类的引入 2.2 类的定义 2.3 类的访问限定符及封装 2.3.1 访问限定符 2.3.2 封装 2.3.3 类的作用域 2.3.4 类的实例化 2.4 this指针 一、面向对象的思想 在正式介绍类与对象之前我们首先先简单了解一下面向对象的思想&#xff0c;提到…

4G车牌识别如何实现低功耗AOV唤醒拍照?

车牌识别摄像机&#xff0c;一般的做法是有线方式&#xff0c;并且采用有线网络或者是RJ45网络&#xff0c;如果换个方式&#xff0c;比如在野外工地&#xff0c;矿场&#xff0c;需要识别一些车牌&#xff0c;上传到服务器平台&#xff0c;要考虑的是无线&#xff0c;无电&…

Mybatisplus LambdaQueryWrapper表达式使用DATE_FORMAT比较日期函数

背景&#xff1a; 最近遇到一个问题&#xff0c;数据库保存的日期字段是如下格式 但是我们需要比较的日期为 2020-08-01格式&#xff0c; 所以我们要将日期格式化 使用 Mybatisplus LambdaQueryWrapper的情况下可用下面的方式做参考 LambdaQueryWrapper<SysDicCode> la…

C++“流”风格日志系统实战-课程简介

一个能快速提升C复杂代码设计的学习项目&#xff0c;一个能迅速让C面试官会心一笑的简历项目&#xff0c;一个能在实际项目中使用的项目……学习什么是流&#xff1f;如何利用抽象层面的流编写适用面更广的代码&#xff1f; 每天在用的cout和cin 它们是什么类型&#xff1f;最后…

【SpringBoot整合系列】SpringBoot配置多数据源

目录 背景技术选型配置多数据源思路(以两个为例)代码实现1.导入依赖2.各自的配置 3.各自的dataSourcenews数据库的smbms数据库的注意&#xff1a;Primary注解 4.各自的SqlSessionFactory等news数据库的smbms数据库的 5.去掉启动类头上的MapperScan6.各自的mapper接口7.各自的ma…

书籍发售:七个阶段,让你详细了解“有书共读”的完整发售流程

有书共读发售流程 你要在本子上画一个流程或者是导图上。 首先整个过程分成7个阶段: 第1个:预告阶段, 第2个:售书阶段, 第3个:发货阶段, 第4个:共读阶段, 第5个:发售阶段, 第6个:售卖周期, 第7个:发售结束, 一共7个阶段,最重要的是前5个阶段,第6和7个…

Java 网络编程之TCP(三):基于NIO实现服务端,BIO实现客户端

前面的文章&#xff0c;我们讲述了BIO的概念&#xff0c;以及编程模型&#xff0c;由于BIO中服务器端的一些阻塞的点&#xff0c;导致服务端对于每一个客户端连接&#xff0c;都要开辟一个线程来处理&#xff0c;导致资源浪费&#xff0c;效率低。 为此&#xff0c;Linux 内核…

SVG 绘制微信订阅号icon

效果 代码 <!DOCTYPE html> <html> <body><svg xmlns"http://www.w3.org/2000/svg" version"1.1" width"600" height"600"><rect x"0" y"0" rx"0" ry"0" width&…

qt5-入门-自定义委托-可编辑的TableModel与信号接收

参考&#xff1a; C GUI Programming with Qt 4, Second Edition 本地环境&#xff1a; win10专业版&#xff0c;64位&#xff0c;Qt5.12 上一篇&#xff1a; qt5-入门-自定义委托-简单例子_qt 委托-CSDN博客 https://blog.csdn.net/pxy7896/article/details/137234839 本篇重…

如何从架构层面降低公有云多可用区同时故障的概率

阿里云和腾讯云都曾出现过因一个组件故障而导致所有可用区同时瘫痪的情况。本文将探讨如何从架构设计的角度减小故障域&#xff0c;在故障发生时最小化业务损失&#xff0c;并以 Sealos 的稳定性实践为例&#xff0c;分享经验教训。 抛弃主从&#xff0c;拥抱点对点架构 从腾…

分布式版本控制工具 Git 的使用方式

文章目录 Git简介下载安装基本使用起始配置Git 的三个区域基本操作流程查看仓库状态删除&#xff08;撤销暂存区&#xff09;差异对比查看版本日志版本回退修改提交日志分支概念&#xff1a;创建分支与切换分支合并分支&#xff08;快速合并&#xff09;合并分支&#xff08;提…

Vue3+.NET6前后端分离式管理后台实战(十六)

1&#xff0c;Vue3.NET6前后端分离式管理后台实战(十六)已经在微信公众号更新&#xff0c;有兴趣的扫码关注一起交流学习。 有兴趣的扫码关注

MySQL数据库精讲001——概述

MySQL数据库精讲001——概述 文章目录 MySQL数据库精讲001——概述1.1 安装1.1.1 版本1.1.2 安装一、下载二、解压三、配置1. 添加环境变量2. 初始化MySQL3. 注册MySQL服务4. 启动MySQL服务5. 修改默认账户密码 四、登录MySQL五、卸载MySQL 1.1.3 连接1.1.4 企业使用方式(了解)…

大数据入门——概念、工具等

目录 一、基本概念 1.大数据技术 2.大数据特点 3.常见概念 4.数据分析师、数据开发工程师 二、相关工具 三、应用场景 四、大数据业务流程及组织结构 一、基本概念 1.大数据技术 主要解决海量数据的采集、存储和分析计算问题 2.大数据特点 大量、高速、多样、价值、…