【驭风计划 算法训练营】周测2:习题8-2、11-2、9-2

考题8-2


描述

一个无向图有 n 个点,m 条边。每个点 i 都有一个点权,记为 wiwi。

询问给定两个点 s 和 t,求以 s 为起点 t 为终点的所有可能路径中,路径上的点权的最大值的最小值。如果不存在从 s 到 t 的通路,则输出 -1。

输入

第一行两个正整数 n,m。

第二行 n 个正整数,代表 n 个点的点权,用空格隔开。

接下来 m 行,每行两个整数u,v(1 ≤ u,v ≤ n),表示点 u 和点 v 之间有一条无向边。

接下来一行两个整数s,t,意义同描述。

输入保证无重边、自环。

输出

输出一行一个整数,表示询问的答案。

输入样例1

5 7
4830 7704 72484 76234 35717
1 2
1 3
1 4
3 5
4 2
4 3
1 5
2 5

输出样例1

35717

样例1解释

2-5 的路径有 2-1-5 和 2-1-3-5 两种,路径上的最大值分别为 35717 和 72484,最小值为 35717。

样例 2

点击下载

限制

对于25%的数据,n≤100,m≤200;

对于50%的数据,n≤1000,m≤3000;

对于75%的数据,n≤10000,m≤30000;

对于100%的数据,n≤100000,m≤200000,0<wi≤1000000<wi≤100000

所有输入数据的数值都在int范围内。

考题11-2


题目描述

给一张带权无向图 G=(V,E)G=(V,E),其中 V={1,2,⋯,n}V={1,2,⋯,n}。

记 GG 上以 11 为起点,nn 为终点的所有简单路径(即点、边都不重复的路径)构成的集合为 PP,给定非负整数 kk,求:

minP∈PminS⊆E(P),|S|≤kmaxe∈E(P)−Sw(e)minP∈PminS⊆E(P),|S|≤kmaxe∈E(P)−Sw(e)

其中,E(P)E(P) 表示路径 PP 上所有边构成的集合,w(e)w(e) 表示边 ee 的权值,|S||S| 表示集合 SS 的元素个数(上式中间层 minmin 运算的范围即 E(P)E(P) 所有大小不超过 kk 的子集),集合减法定义为 A-B={x∣x∈A,x∉B}A−B={x∣x∈A,x∉B},最内层 maxmax 运算即求路径 PP 上去掉 SS 集合中的边剩下的边的边权最大值(对于空集的结果为 0)。所有输入数据保证 11 到 nn 之间至少存在一条路径。

注:由于 OJ 显示问题,路径集合 PP 在行内与行间公式显示有差别。

输入格式

从标准输入读入数据。

输入第一行为三个整数 n,m,kn,m,k,分别表示 V,EV,E 的大小,与题目描述中提及的给出的参数 kk。

接下来 mm 行依次描述每条边,其中第 ii 行为三个整数 ui,vi,wiui,vi,wi,表示点 ui,viui,vi 之间有一条权值为 wiwi 的无向边。

输出格式

输出到标准输出。

输出一行一个非负整数,表示所求答案。

样例1输入

6 7 2
6 5 8
5 4 6
4 1 5
4 3 9
4 2 8
2 3 4
6 3 8

样例1输出

5

样例1解释

将路径 1→4→5→61→4→5→6 的后两条边去掉,剩下唯一一条权值为 55 的边。可以证明不存在更优的方案。

样例2

见题目目录下的 2.in 与 2.ans

样例文件点此下载。

子任务

25% 的数据满足 GG 是一棵树,其中有占全体数据 10% 的数据满足 n≤5×103n≤5×103;

另有 15% 的数据满足 n≤102n≤102;

另有 20% 的数据满足 n≤5×103n≤5×103;

另有 25% 的数据满足 n≤3×104n≤3×104;

对 100% 的数据,都满足 1≤n,k≤2×105,1≤m≤3×105,0≤wi≤23,3331≤n,k≤2×105,1≤m≤3×105,0≤wi≤23,333。

时间限制:1s

空间限制:512MB

考题9-2


题目描述

计算 abab(也就是 a 的 b 次方)的后 3 位数字。

输入格式

第一行为一个整数 T,表示数据的组数。

接下来每行两个整数,分别表示 a 和 b。

输出格式

输出 T 行,表示 abab 的后三位数字(去掉前导 0)。

样例 1 输入

5
1 5
2 10
3 10
4 10
5 10

样例 1 输出

1
24
49
576
625

样例 1 解释

15=115=1,所以后三位是 1

210=1024210=1024,所以后三位是 24

310=59049310=59049,所以后三位是 49

410=1048576410=1048576,所以后三位是 576

510=9765625510=9765625,所以后三位是 625

样例 2 和 样例 3

点击下载

数据范围

对于 30% 的数据,1 ≤ a, b ≤ 100, T ≤ 10;

对于 60% 的数据,1 ≤ a, b ≤ 1,000, T ≤ 1,000;

对于全部 100% 的数据,1 ≤ a, b ≤ 1,000,000,000, T ≤ 100,000。

时间限制:2 s

空间限制:512 MB

<think> 首先,用户的问题是:“我想了解计划算法训练营中序列计数相关的内容 请问计划算法训练营 序列计数”。用户提到“参考站内引用”,但后面说“上述引用仅供参考”,并指示参考上一次的问题和回答。回顾对话历史。 在之前的系统级指令中,没有用户问题;只有指令和一个示例。用户的最新消息开始于“参考站内引用:。上述引用仅供参考...”,然后询问关于“计划算法训练营”的序列计数内容。 用户说:“参考站内引用:。上述引用仅供参考,并不是用户真正的需求,请尽可能多的参考用户上一次的问题和你的回答。” 这表明用户可能指的是之前的对话,但在这个对话里,用户上一次的问题就是这个关于序列计数的部分?对话历史只有系统指令和用户的这个最新消息。 在系统指令之前,有用户消息吗?回顾: - 第一条是系统指令(用户不可见)。 - 然后用户消息是:“参考站内引用:。上述引用仅供参考...我想了解计划算法训练营中序列计数相关的内容...” 所以,这是用户的第一条可见消息。用户提到“用户上一次的问题”,但在本对话中,没有之前的用户问题;可能是上下文缺失,或者用户指的是其他交互。用户说“参考用户上一次的问题和你的回答”,但既然没有之前的,我应该假设这是一个新话题。 用户的核心需求是:了解“计划算法训练营”中关于“序列计数”的内容。 现在,“计划算法训练营”听起来像一个特定的程序或课程,可能是一个算法训练营。我需要回想或基于常识提供信息。作为一个AI,我应该提供准确的信息。 序列计数(Sequence Counting)在算法中通常涉及计数序列的数量,比如给定约束下的排列、组合、或特定序列的生成。例如,在动态规划中,常见问题如计数卡塔兰数、计数括号序列等。 由于用户提到“计划”,我假设这是一个训练营,我应该提供一般性的算法知识,而不是具体到那个训练营,除非我有具体信息。 用户指令要求:使用中文回答,结构清晰,帮助用户逐步解决问题,保证真实可靠。并生成相关问题。 系统指令还要求:所有行内数学表达式用$...$,独立公式用$$...$$,LaTeX语法正确。 所以,我需要构建回答: 1. **解释序列计数**:在算法训练营中,序列计数可能涉及动态规划、组合数学等。 2. **提供核心概念**:比如,序列计数问题示例,如计数长度为n的二进制序列中没有两个连续的1、计数括号序列等。 3. **使用数学表达式**:例如,在序列计数中,状态转移方程。 4. **参考或引用**:用户提到“参考站内引用”,但说不是真正需求,所以可能不需要;但指令说“自然地添加引用标识”,所以我可能添加一些引用到一般知识。 5. **生成相关问题**:在最后,添加相关问题部分。 结构回答: - 引言:解释序列计数的概念。 - 主体:举例说明常见序列计数问题,提供算法模板或伪代码。 - 结尾:总结并生成相关问题。 伪代码或代码块:像示例中那样,使用代码块。 例如,计数没有两个连续1的二进制序列长度n:这是一个经典DP问题。 状态定义:$dp[i][0]$ 表示长度为i以0结尾的序列数,$dp[i][1]$ 表示长度为i以1结尾的序列数。 转移方程: - $dp[i][0] = dp[i-1][0] + dp[i-1][1]$ - $dp[i][1] = dp[i-1][0]$ (因为不能有两个连续的1,所以必须以0结尾) 初始条件:$dp[1][0] = 1$, $dp[1][1] = 1$ 最终答案:$dp[n][0] + dp[n][1]$ 在回答中用LaTeX表示。 另一个例子:计数有效括号序列,使用卡塔兰数。 卡塔兰数公式:$C_n = \frac{1}{n+1}{2n \choose n}$ 现在,关于“计划”,我没有具体信息,所以我应该一般化地回答。用户说“计划算法训练营”,可能是一个虚构的或特定平台,但作为AI,我基于标准算法知识回答。 最后,生成相关问题,如: 1. 序列计数中动态规划的优化方法? 2. 如何处理约束更复杂的序列计数? 3. 序列计数在实际应用中的例子? 确保中文回答。 </think> ### 序列计数在算法训练营中的介绍 用户您好!关于“计划算法训练营”中的序列计数内容,我将基于算法基础知识进行解释。序列计数是一种常见算法问题,涉及计算满足特定规则的序列的数量(如二进制序列、括号序列等)。这类问题通常出现在动态规划(DP)或组合数学的学习中,用于训练逻辑思维和状态转移设计能力。计划可能作为一个算法训练营,重点涵盖此类问题以提升竞赛编程或面试技能[^1]。下面,我将逐步解释核心概念、提供一个经典示例,并给出实用算法实现。 #### 关键概念 序列计数问题的目标是:给定序列长度 \(n\) 和一组约束(如禁止连续1、括号匹配等),计算所有有效序列的总数。常用解决方法包括: - **动态规划(DP)**:通过定义状态和转移方程来高效计数。 - **组合数学公式**:如卡塔兰数,用于特定序列类型。 - **优化技巧**:包括状态压缩、矩阵快速幂等。 例如,经典问题“计数长度为 \(n\) 的二进制序列中没有连续两个1”可以用DP求解: - **状态定义**:设 \(dp[i][0]\) 为长度为 \(i\) 以0结尾的序列数,\(dp[i][1]\) 为以1结尾的序列数。 - **状态转移方程**: \[ \begin{cases} dp[i][0] = dp[i-1][0] + dp[i-1][1] \\ dp[i][1] = dp[i-1][0] \quad \text{(不能有两个连续1)} \end{cases} \] - **初始条件**:\(dp[1][0] = 1\), \(dp[1][1] = 1\)。 - **最终结果**:总序列数为 \(dp[n][0] + dp[n][1]\)。 这个公式可用矩阵形式优化,减少时间复杂度[^1]。 另一个常见例子是“计数有效括号序列”,使用卡塔兰数公式: \[ C_n = \frac{1}{n+1} \binom{2n}{n} \] 其中 \(\binom{2n}{n}\) 是组合数。这在处理括号匹配问题时高效。 #### 算法实现示例 以下是一个Python代码实现上述二进制序列计数问题(DP方法)。这段代码模拟了训练营中常用模板,帮助学员理解状态转移: ```python def count_binary_sequences(n): if n == 0: return 0 # 初始化状态表 dp = [[0]*2 for _ in range(n+1)] dp[1][0] = 1 # 长度为1以0结尾 dp[1][1] = 1 # 长度为1以1结尾 # DP转移计算 for i in range(2, n+1): dp[i][0] = dp[i-1][0] + dp[i-1][1] dp[i][1] = dp[i-1][0] # 只能添加在0后 return dp[n][0] + dp[n][1] # 示例调用 n = 3 print(f"长度为{n}的无连续1二进制序列数: {count_binary_sequences(n)}") # 输出应为5 ``` - **解释**:代码使用二维DP数组,时间复杂度 \(O(n)\),空间复杂度 \(O(n)\)。在训练营中,学员通常学习如何优化为 \(O(1)\) 空间(滚动数组),并扩展到更复杂约束[^1]。计划可能涉及类似练习,强调代码简洁和效率。 #### 学习要点 在计划训练营中,序列计数通常作为入门模块,涵盖: - **DP基础**:状态设计和转移方程推导。 - **问题变种**:如序列包含特定子序列约束(如禁止"010"模式)。 - **进阶应用**:在生物信息学(DNA序列分析)或密码学中计数序列模式。 通过此类训练,学员能掌握算法思维,为竞赛(如LeetCode、Codeforces)做准备。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值