通过海量题库、编程比赛和实时排名,系统化提升您的编程能力。
"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 >f[u]
k< f[u]
所属试卷:CSP-S1提高级初赛试卷[2023]
有如下程序,程序的输出结果是。
阅读给定程序(函数fun(int a,int b)返回
下列关于图的叙述中,正确的是( )。
有以下程序:程序运行后的输出结果是。
以下描述中,不是线性表顺序存储结构特征的是( )。
有以下程序程序运行后的输出结果是( )。
设有如下程序段:以下叙述正确的是( )。
有以下程序:程序的运行结果是( )。
以下正确的字符串常量是。
以下叙述正确的是( )。
有以下程序:程序的运行结果是。
下面程序为什么会编译错误,并改正错误(提出解决办法)。
列表可以作为集合的元素。
用于删除数据库表test中所有name字段值为’100
Python标准库random中的________方法
以下程序的运行结果是输出如下图形。请填空。
若x=0123,则表达式(5+(int)(x)&(-2
表达式值的数据类型为________。
假定题44给出的计算机M采用二级分页虚拟存储管理方式,
有一普通用户想在每周日凌晨零点零分定期备份/user/
对于Shell脚本程序,若输入参数数量多于9个,则程序
数据库系统中,实现数据管理功能的核心软件称为
宏命令#define无论在文件中何处定义,其有效范围在
C语言的三种基本结构是_____结构、选择结构、循环结
C语言的函数可以嵌套定义。
将函数funl的入口地址赋给指针变量p的语句是____
以下叙述中正确的是。
请编写函数fun,它的功能是:计算并输出n(包括n)以
输出:( )
输入: 17输出:_______
更多选择题
更多填空题
第十章 C++流
第九章 C++模板
第八章 C++运算符重载
C++语言程序设计真题5
C++语言程序设计真题4
C++语言程序设计真题3
C++语言程序设计真题2