2025年3月GESP八级真题解析
第一题——上学
题目描述
C 城可以视为由 n n n 个结点与 m m m 条边组成的无向图。这些结点依次以 1 , 2 , … , n 1,2,…,n 1,2,…,n 标号,边依次以 1 , 2 , … , m 1,2,…,m 1,2,…,m 标号。第 i i i 条边( 1 ≤ i ≤ m 1≤i≤m 1≤i≤m)连接编号为 u i u_i ui 与 v i v_i vi 的结点,长度为 l i l_i li 米。
小 A 的学校坐落在 C 城中编号为 s s s 的结点。小 A 的同学们共有 q q q 位,他们想在保证不迟到的前提下,每天尽可能晚地出门上学。但同学们并不会计算从家需要多久才能到学校,于是找到了聪明的小 A。第 i i i 位同学( 1 ≤ i ≤ q 1≤i≤q 1≤i≤q)告诉小 A,他的家位于编号为 h i h_i hi 的结点,并且他每秒能行走 1 1 1 米。请你帮小 A 计算,每位同学从家出发需要多少秒才能到达学校呢?
输入格式
第一行,四个正整数 n , m , s , q n,m,s,q n,m,s,q,分别表示 C 城的结点数与边数,学校所在的结点编号,以及小 A 同学们的数量。
接下来 m m m 行,每行三个正整数 u i , v i , l i u_i,v_i,l_i ui,vi,li,表示 C 城中的一条无向边。
接下来 q q q 行,每行一个正整数 h i h_i hi,表示一位同学的情况。
输出格式
共 q q q 行,对于每位同学,输出一个整数,表示从家出发到学校的最短时间。
样例
输入样例 1
5 5 3 3
1 2 3
2 3 2
3 4 1
4 5 3
1 4 2
5
1
4
输出样例 1
4
3
1
数据范围
对于 20 % 20\% 20% 的测试点,保证 q = 1 q=1 q=1。
对于另外 20 % 20\% 20% 的测试点,保证 1 ≤ n ≤ 500 , 1 ≤ m ≤ 500 1≤n≤500,1≤m≤500 1≤n≤500,1≤m≤500。
对于所有测试点,保证 1 ≤ n ≤ 2 × 1 0 5 , 1 ≤ m ≤ 2 × 1 0 5 , 1 ≤ q ≤ 2 × 1 0 5 1≤n≤2×10^5,1≤m≤2×10^5,1≤q≤2×10^5 1≤n≤2×105,1≤m≤2×105,1≤q≤2×105, 1 ≤ u i , v i , s , h i ≤ n , 1 ≤ l i ≤ 1 0 6 1≤u_i,v_i,s,h_i≤n,1≤l_i≤10^6 1≤ui,vi,s,hi≤n,1≤li≤106。保证给定的图联通。
分析
这道题其实非常简单,是一道裸的最短路问题,我们只需要从终点出发反着跑就可以了,非常的简单。
#include<bits/stdc++.h>
using namespace std;
const int INF=2e5+10;struct Node{long long v,num;bool operator <(const Node &a)const{return num>a.num;}
};vector<Node> mp[INF];
long long dis[INF],used[INF];
priority_queue<Node> q;void dijkstra(int x){dis[x]=0,q.push({x,0});while (!q.empty()){long long u=q.top().v;q.pop();if (used[u]==1)continue;used[u]=1; int len=mp[u].size();for (int i=0;i<len;i++){long long v=mp[u][i].v,w=mp[u][i].num;if (dis[v]>dis[u]+w){dis[v]=dis[u]+w;q.push({v,dis[v]});}}}
}int main(){int n,m,s,q;cin>>n>>m>>s>>q;for (int i=1;i<=n;i++){dis[i]=1e18;}for (int i=1;i<=m;i++){long long u,v,l;cin>>u>>v>>l;mp[u].push_back({v,l});mp[v].push_back({u,l});}dijkstra(s);for (int i=1;i<=q;i++){int t;cin>>t;cout<<dis[t]<<endl;}return 0;
}
广告
最短路算法——CSDN
最短路算法——博客园
第二题——割裂
题面描述
小杨有一棵包含 n n n 个节点的树,其中节点的编号从 1 1 1 到 n n n。
小杨设置了 a a a 个好点对< u 1 u_1 u1, v 1 v_1 v1>,< u 2 u_2 u2, v 2 v_2 v2>,…,< u a u_a ua, v a v_a va>和 1 个坏点对 < b u b_u bu, b v b_v bv>。一个节点能够被删除,当且仅当:
删除该节点后对于所有的 i ( 1 ≤ i ≤ a ) i(1≤i≤a) i(1≤i≤a),好点对 u i u_i ui 和 v i v_i vi 仍然连通;
删除该节点后坏点对 b u b_u bu 和 b v b_v bv 不连通。
如果点对中的任意一个节点被删除,其视为不连通。
小杨想知道,有多少个节点能够被删除。
输入格式
第一行包含两个正整数 n , a n,a n,a,含义如题面所示。
之后 n − 1 n−1 n−1 行,每行包含两个正整数 x i , y i x_i,y_i xi,yi,代表存在一条连接节点 x i x_i xi 和 y i y_i yi 的边。
之后 a a a 行,每行包含两个正整数 u i , v i u_i,v_i ui,vi,代表一个好点对 < u i , v i u_i,v_i ui,vi>。
最后一行包含两个正整数 b u , b v b_u,b_v bu,bv,代表坏点对 < b u , b v b_u,b_v bu,bv>。
输出格式
输出一个正整数,代表能够删除的节点个数。
样例
输入样例
6 2
1 3
1 5
3 6
3 2
5 4
5 4
5 3
2 6
输出样例
2
数据范围
对于全部数据,保证有 1 ≤ n ≤ 1 0 6 , 0 ≤ a ≤ 1 0 5 , u i ≠ v i , b u ≠ b v 1≤n≤10^6,0≤a≤10^5,ui≠vi,bu≠bv 1≤n≤106,0≤a≤105,ui=vi,bu=bv。
分析
这道题其实还有点思维含量,根据题目,我们要知道那些点是能删的,那些点是不能删的,基于此,我们就要维护出来每个点被那些点所经过了,或者说被经过了几次,如果说一个点没有被任何的好点经过,并且被坏点经过了,那么就说明这个点是可以被删除的,我这里说的被好点经过指的是两个好点之间的路径哈,不要搞错了。
如果说思路是这样的话,我们是不是就可以很显然想到一个做法,树上差分?而且这个是一个非常简答的点差分,所以说没有任何的难度好吧。
#include<bits/stdc++.h>
using namespace std;
const int INF=1e6+10;vector<int> mp[INF];
int dp[INF][30],deep[INF],p[INF],d[INF];void prepare(int x,int fa){for (int i=1;(1<<i)<=deep[x]-1;i++){dp[x][i]=dp[dp[x][i-1]][i-1];}int len=mp[x].size();for (int i=0;i<len;i++){if (mp[x][i]==fa)continue;int t=mp[x][i];dp[t][0]=x,deep[t]=deep[x]+1;prepare(t,x);}
}
int getroot(int x,int y){if (deep[x]<deep[y])swap(x,y);int index=__lg(deep[x]-deep[y]);for (int i=index;i>=0;i--){if (deep[dp[x][i]]>=deep[y])x=dp[x][i];if (deep[x]==deep[y])break;}if (x==y)return x;for (int i=20;i>=0;i--){if (dp[x][i]!=dp[y][i])x=dp[x][i],y=dp[y][i];}return dp[x][0];
}void get_p(int x,int fa){int len=mp[x].size();for (int i=0;i<len;i++){if (mp[x][i]==fa)continue;int t=mp[x][i];get_p(t,x);p[x]+=p[t];}
}void get_d(int x,int fa){int len=mp[x].size();for (int i=0;i<len;i++){if (mp[x][i]==fa)continue;int t=mp[x][i];get_d(t,x);d[x]+=d[t];}
}
int main(){int n,a;cin>>n>>a;for (int i=1;i<n;i++){int u,v;cin>>u>>v;mp[u].push_back(v);mp[v].push_back(u);}deep[1]=1;prepare(1,-1);for (int i=1;i<=a;i++){int u,v;cin>>u>>v;int root=getroot(u,v);p[u]++,p[v]++,p[root]--,p[dp[root][0]]--;}get_p(1,-1);int b1,b2;cin>>b1>>b2;int root=getroot(b1,b2);d[b1]++,d[b2]++,d[root]--,d[dp[root][0]]--;get_d(1,-1);int cnt=0;for (int i=1;i<=n;i++){if (d[i]&&!p[i])cnt++;}cout<<cnt;return 0;
}
总结
这次的八级题不算难,只不过前面的选择题和判断题CCF出错了,所以说耽误了一点时间,对于基础比较好的人来说,这套八级的题大概是可以在1个半小时内做完的(像我这么一个蒟蒻,都只花了差不多1个小时)
相关文章:
2025年3月GESP八级真题解析
第一题——上学 题目描述 C 城可以视为由 n n n 个结点与 m m m 条边组成的无向图。这些结点依次以 1 , 2 , … , n 1,2,…,n 1,2,…,n 标号,边依次以 1 , 2 , … , m 1,2,…,m 1,2,…,m 标号。第 i i i 条边( 1 ≤ i ≤ m 1≤i≤m 1≤i≤m&#…...
C++继承机制:从基础到避坑详细解说
目录 1.继承的概念及定义 1.1继承的概念 1.2 继承定义 1.2.1定义格式 1.2.2继承关系和访问限定符 1.2.3继承基类成员访问方式的变化 总结: 2.基类和派生类对象赋值转换 3.继承中的作用域 4.派生类的默认成员函数 编辑 默认构造与传参构造 拷贝构造&am…...
NVMe(Non-Volatile Memory Express)详解
一、NVMe的定义与核心特性 NVMe(非易失性内存主机控制器接口规范)是一种 基于PCIe总线的高性能存储协议,专为固态硬盘(SSD)设计,旨在替代传统的AHCI协议(如SATA)。其核心特性包括&a…...
MySQL数据库精研之旅第二期:库操作的深度探索
专栏:MySQL数据库成长记 个人主页:手握风云 目录 一、查看数据库 二、创建数据库 2.1. 语法 2.2. 示例 三、字符集编码和校验(排序)规则 3.1. 查看数据库支持的字符集编码 3.2. 查看数据库支持的排序规则 3.3. 不同的字串集与排序规则对数据库的…...
git_version_control_proper_practice
git_version_control_proper_practice version control,版本控制的方法之一就是打tag 因为多人协作的项目团队,commit很多,所以需要给重要的commit打tag,方便checkout,检出这个tag 参考行业的实践方式。如图git、linux…...
从单任务到多任务:进程与线程如何实现并发?
文章目录 1. 什么是进程定义进程的构成进程的状态进程与线程的关系进程的创建与销毁进程调度进程间通信(IPC)总结 2. 什么是线程?定义线程与进程的关系线程的特点线程的优点线程的类型线程的创建与销毁线程间通信总结 3. 进程与线程有什么区别…...
计算机组成原理和计算机网络常见单位分类及换算
计算机组成原理(主要用于存储、内存、缓存等) 计算机网络(主要用于传输速率) 直观对比...
【第二十八周】:Temporal Segment Networks:用于视频动作识别的时间分段网络
TSN 摘要Abstract文章信息引言方法时间分段采样分段聚合输入模态聚合函数多尺度时序窗口集成(M-TWI)训练 代码实现实验结果总结 摘要 本篇博客介绍了时间分段网络(Temporal Segment Network, TSN),这是一种针对视频动…...
为WordPress自定义一个留言板
要在WordPress中创建一个留言反馈表单,并实现后台管理功能,您可以按照以下步骤进行操作: 1. 创建留言反馈表单 首先,您需要使用一个表单插件来创建表单。推荐使用 Contact Form 7 或 WPForms。以下是使用 Contact Form 7 的示例…...
扩展域并查集
什么叫扩展域并查集 1 和 2是敌人,那么就把1好12链接起来:表示1和2是敌人 2和11链接起来也是这个道理 然后2 和3使敌人同理。 最后12连接了1 和 3,表名1 和 3 是 2 的敌人,1和3 就是朋友 1.P1892 [BalticOI 2003] 团伙 - 洛谷 #in…...
【C#语言】C#同步与异步编程深度解析:让程序学会“一心多用“
文章目录 ⭐前言⭐一、同步编程:单线程的线性世界🌟1、寻找合适的对象✨1) 🌟7、设计应支持变化 ⭐二、异步编程:多任务的协奏曲⭐三、async/await工作原理揭秘⭐四、最佳实践与性能陷阱⭐五、异步编程适用场景⭐六、性能对比实测…...
动态规划入门详解
动态规划(Dynamic Programming,简称DP)是一种算法思想,它将问题分解为更小的子问题,然后将子问题的解存起来,避免重复计算。 所以动态规划中每一个状态都是由上一个状态推导出来的,这一点就区别…...
SOFABoot-09-模块隔离
前言 大家好,我是老马。 sofastack 其实出来很久了,第一次应该是在 2022 年左右开始关注,但是一直没有深入研究。 最近想学习一下 SOFA 对于生态的设计和思考。 sofaboot 系列 SOFABoot-00-sofaboot 概览 SOFABoot-01-蚂蚁金服开源的 s…...
电池电量检测方法介绍,开路电压法、库仑积分法、内阻法
开路电压法、库仑积分法、内阻法、卡尔曼滤波法、混合法 开路电压法是目前最简单的方法,根据电池的特性得知,在电池容量与开路电压之间存在一定的函数关系,当得知开路电压时,可以初步估算电池的剩余电量。该方法精度不高…...
基于基于eFish-SBC-RK3576工控板的智慧城市边缘网关
此方案充分挖掘eFish-SBC-RK3576的硬件潜力,可快速复制到智慧园区、交通枢纽等场景。 方案亮点 接口高密度:单板集成5GWiFi多路工业接口,减少扩展复杂度。AIoT融合:边缘端完成传感器数据聚合与AI推理,降低云端…...
CSS基础知识一览
持续维护 选择器 display 常用属性 浮动 弹性布局...
《Keras 3 : AI神经网络开发人员指南》
《Keras 3 : AI神经网络开发人员指南》 开发人员指南 我们的开发人员指南深入探讨了特定主题,例如层子类化、微调或模型保存。 它们是成为 Keras 专家的最佳方式之一。 我们的大多数指南都是以 Jupyter 笔记本的形式编写的,可以在 Google Colab 中一键…...
【免费】2000-2019年各省地方财政房产税数据
2000-2019年各省地方财政房产税数据 1、时间:2000-2019年 2、来源:国家统计局、统计年鉴 3、指标:行政区划代码、地区、年份、地方财政房产税 4、范围:31省 5、指标说明:房产税是对个人和单位拥有的房产征收的一种…...
WPF 布局舍入(WPF 边框模糊 或 像素错位 的问题)
1. 什么是 WPF 布局舍入? 在 WPF 开发过程中,可能会遇到界面模糊、边框错位、文本渲染不清晰等问题。这些现象通常是由于 WPF 采用 设备无关像素(DIP, Device Independent Pixels),在不同 DPI 设置下,UI 元…...
车载以太网网络测试-21【传输层-DOIP协议-4】
目录 1 摘要2 DoIP entity status request/response(0x4001、0x4002)2.1 使用场景2.2 报文结构2.2.1 0x4001:DoIP entity status request2.2.2 0x4002:DoIP entity status response 3 Diagnostic power mode information request/…...
机器学习——KNN数据集划分
一、主要函数 sklearn.datasets.my_train_test_split() 该函数为Scikit-learn 中用于将数据集划分为训练集和测试集的函数,适用于机器学习模型的训练和验证。以下是详细解释: 1、函数签名 train_test_split(*arrays, # 输入的数据…...
Pytest基础使用
概述 Pytest是Python里的一个强大的测试框架,灵活易用,可以进行功能,自动化测试使用,可以与Requests,Selenium等进行结合使用,同时可以生成Html的报告。 一、Pytest的基本使用 在未指定Pytest的配置文件时,会对以下文件进行执行: test_*.py,如:test_1.py*_test.py…...
Grid 布局实现三栏布局
使用 CSS Grid 布局实现三栏布局(左右固定 100px,中间自适应)的核心原理是通过网格模板精确控制列宽分配。以下是具体实现方法及优化技巧: 一、基础实现 父容器设置 为外层容器添加 display: grid 使其成为网格容器,并通过 grid-template-columns 定义列宽 css .contain…...
一条sql语句在mysql中的执行流程(Mysql基础架构)
mysql基础架构 MySQL 主要分为 Server 层和 存储引擎层: Server 层:主要包括 连接器、查询缓存、分析器、优化器、执行器等,所有跨存储引擎的功能都在这一层实现,比如存储过程、触发器、视图,函数等,还有一…...
Spring AI Alibaba ChatModel使用
一、对话模型(Chat Model)简介 1、对话模型(Chat Model) 对话模型(Chat Model)接收一系列消息(Message)作为输入,与模型 LLM 服务进行交互,并接收返回的聊天…...
基于FPGA频率、幅度、相位可调的任意函数发生器(DDS)实现
基于FPGA实现频率、幅度、相位可调的DDS 1 摘要 直接数字合成器( DDS ) 是一种通过生成数字形式的时变信号并进行数模转换来产生模拟波形(通常为正弦波)的方法,它通过数字方式直接合成信号,而不是通过模拟信号生成技术。DDS主要被应用于信号生成、通信系统中的本振、函…...
k8s高可用集群安装
一、安装负载均衡器 k8s负载均衡器 官方指南 1、准备三台机器 节点名称IPmaster-1192.168.1.11master-2192.168.1.12master-3192.168.1.13 2、在这三台机器分别安装haproxy和keepalived作为负载均衡器 # 安装haproxy sudo dnf install haproxy -y# 安装Keepalived sudo yum …...
WPF Reactive 数据绑定
文章目录 Combox 绑定List-通过枚举绑定方法一:方法二:Button 绑定TextBlock绑定NumericUpDown绑定Expander绑定checkbox绑定NumericUpDownCombox 绑定List-通过枚举绑定 方法一: ViewControl using Avalonia; using Avalonia.Controls; using Avalonia.Markup.Xaml; usin…...
WSL 环境桥接与雷达通信配置笔记
作者: DWDROME 维护时间: 2025-03-22 参考文章:Windows子系统(WSL)通过桥接网络实现被外部局域网主机直接访问 WSL 环境桥接与雷达通信配置笔记 环境说明 Windows 11 专业版(启用 Hyper-V)WSL2 Ubuntu 20.04物理网线(…...
3DMAX曲线生成器插件CurveGenerator使用方法
1. 脚本功能简介 3DMAX曲线生成器插件CurveGenerator是一个用于 3ds Max 的样条线生成工具,用户可以通过简单的UI界面输入参数,快速生成多条样条线。每条样条线的高度值随机生成,且可以自定义以下参数: 顶点数量:每条…...
