通过海量题库、编程比赛和实时排名,系统化提升您的编程能力。
"CSP考试" 试卷中 CSP-S1提高级初赛试卷[2023] 中有题目如下:
第1题
(第k小路径)给定一张.个点.条边的有向无环图,顶点编号从0到n-1。对于一条路径,我们定义"路径序列"为该路径从起点出发依次经过的顶点编号构成的序列。求所有至少包含一个点的简单路径中,“路径序列"字典序第k小的路径。保证存在至少k条路径。上述参数满足1≤n.m≤105和1≤k≤1018。
在程序中,我们求出从每个点出发的路径数量。超过1018的数都用1018表示。然后我们根据k的值和每个顶点的路径数量,确定路径的起点,然后可以类似地依次求出路径中的每个点。
试补全程序。
#include <iostream> #include <algorithm> #include <vector> const int MAXN = 100000; constlonglongLIM=100000000000000000011; int n,m,deg[MAXN]; std::vector<int> E[MAXN]; long long k,f[MAXN]; int next(std::vector<int>cand,long long &k){ std::sort(cand.begin(),cand.end()); for(int u : cand){ if (①)return u; k -= f[u]; } return -1; } int main(){ std::cin>>n>>m>>k; for(inti=0;i<m;++i){ int u, v; std::cin >>u >> v;//一条从u到v的边 E[u].push_back(v); ++deg[v]; } std::vector<int> Q; for(inti=0;i<n;++i) if (!deg[i])Q.push_back(i); for(inti=0;i<n;++i){ int u = Q[i]; for (int v : E[u]){ if (②)Q.push_back(v); --deg[v]; } } std::reverse(Q.begin(), Q.end()); for(int u : Q){ f[u]= 1; for(int v:E[u])f[u]=③; } int u = next(Q,k); std::cout << u << std::endl; while(④){ ⑤; u = next(E[u],k); std::cout << u << std::endl; } return 0; }
⑤处应填( )
k += f[u]
k -= f[u]
--k
++k
所属试卷:CSP-S1提高级初赛试卷[2023]
编写代码,获得用户输入的一个整数,计算其平方和立方并输
函数fun的功能是:将s所指字符串中ASCII值为偶数
一名工作人员可以使用多台计算机,而一台计算机可被多名工
有以下程序:程序运行后的输出结果是( )。
Python集合中的元素不允许重复。
集合中的元素不能是哪些数据类型( )。
编写程序实现功能:对于给定的一个百分制成绩,改用相应的
设有说明:double y=0.5,z=1.5;int
请读程序段以上程序段的输出结果为________。
综合业务数字网的缩写是( )
可在C程序中用作用户标识符的一组标识符是( )。
给定程序中,函数fun的功能是:将N╳N矩阵主对角线元
linux文件系统中每个文件用________来标识
填写标记代码行的意义,给出功能描述和前6行程序输出。答
存在一个等待事务集{T0,T1,„,Tn},其中T0正
一个仓库可以存放多种产品,一种产品只能存放于一个仓库中
以下哪项用来分组( )
在select语句的where子句中,使用正则表达式过
当a=3,b=2,c=1时,执行以下程序段后a=___
功能:根据整型形参m,计算如下公式的值:y=1/2+1
将数组a的首地址赋给指针变量p的语句是_____。
以下不能正确定义二维数组的选项是( )。
设(k=a=5,b=3,a*b),则表达式的值为___
(魔法数字)小H的魔法数字是4。给定n,他希望用若干个
现有一个地址区间为0~10的哈希表,对于出现冲突情况,
有以下程序程序运行后的输出结果是
假设输入的 n 是不超过 50 的正整数,d[i][0
输出:( )
输入: 7 4输出: _________
输入: Expo 2010 Shanghai Chin
更多选择题
更多填空题
计算机二级Python语言程序设计模拟试卷
Python第三方库
2025年考研408计算机统考真题在线评测(附答案)
Python标准库
Python函数
Python文件
Python组合数据类型